forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   Траектория полета (http://forum.boolean.name/showthread.php?t=13380)

DeeJex 19.09.2010 23:52

Траектория полета
 
Наверное, не надо было это выкладывать. Просто делаю игру типа Worms, нужно было разобраться с траекторией полета снаряда.

Функции нужны для расчета траектории падения снаряда.
Код:

Type TPath
Field angle#
Field power#,maxpower#
Field plotx#,ploty#
Field plotxold#,plotyold#
End Type


Graphics 640,480,32,2
SetBuffer BackBuffer()

angle# = -45
power# = 5
maxpower# = 10

mypath = Path_Add(angle,power,maxpower,50,200)

While Not KeyDown(1)
       
        Cls
       
                If KeyDown(203) Then angle = angle - 10 ;Left arrow
                If KeyDown(205) Then angle = angle + 10 ;Right arrow
                        If angle<-85 Then angle = -85
                        If angle>-5 Then angle = -5
       
                If KeyDown(208) Then power = power - 1 ;Down arrow
                If KeyDown(200) Then power = power + 1 ;Up arrow
                        If power<1 Then power = 1
                        If power>10 Then power = 10

;Drawing path
                Path_SetAngle mypath,angle
                Path_SetPower mypath,power
               
                Color 255,0,0
                        tmp_limited=0
                        Path_Update 1
                For i = 1 To 75
                        Path_Update 1
                        Line Path_GetXOld(mypath),Path_GetYOld(mypath),Path_GetX(mypath),Path_GetY(mypath)
                        If Path_GetY(mypath)>Path_GetYOld(mypath) And tmp_limited=0 Then
                                tmp_limited = 1
                                Color 255,255,255
                                Line Path_GetXOld(mypath),Path_GetYOld(mypath)-10,Path_GetXOld(mypath),Path_GetYOld(mypath)+10
                                Text Path_GetXOld(mypath),Path_GetYOld(mypath)-20,"Vertical limit - "+(Path_GetYOld(mypath)-200),1,1
                                Color 255,0,0
                        End If
                Next
        Path_SetX mypath,50
        Path_SetY mypath,200

;Drawing interface
                Color 255,255,255
               
                Line 50,200,100,200
                Line 50,200,50,150
                Line 50,200,50+Cos(angle)*50,200+Sin(angle)*50
                Text 75,210,"0",1,1
                Text 40,175,"-90",1,1
                Text 75,225,"Angle is "+angle,1,1
                Text 75,240,"(To change use <- and ->)",1,1
               
                Color 0,0,0
                Rect 550,150,40,100
                Color 128,128,128
                Rect 550,150,40,power*(100/maxpower)
                Color 255,255,255
                Rect 550,150,40,100,0
                Line 500,150,550,150
                Text 525,140,Float(0),1,1
                Line 500,250,550,250
                Text 525,260,maxpower + " - max power",1,1
                If power<maxpower
                        Line 500,150+power*(100/maxpower),600,150+power*(100/maxpower)
                        Text 525,140+power*(100/maxpower),power,1,1
                End If
                Text 550,285,"Use Up and Down to change",1,1
               
       

        Flip

        WaitKey

Wend

End



Function Path_Add(angle#,power#,maxpower#,x#=0,y#=0)
        Path.TPath = New TPath
        Path\angle = angle
        Path\power = power
        Path\maxpower = maxpower
        Path\plotx = x
        Path\ploty = y
        Return Handle(Path)
End Function

Function Path_Delete(pathindex)
        Path.TPath = Object.TPath(pathindex)
        If Path<>Null Then Delete Path
End Function

        Function Path_SetAngle(pathindex,angle#)
                Path.TPath = Object.TPath(pathindex)
                If Path<>Null
                        Path\angle = angle
                End If
        End Function

        Function Path_SetPower(pathindex,power#)
                Path.TPath = Object.TPath(pathindex)
                If Path<>Null
                        Path\power = power
                End If
        End Function

        Function Path_SetMaxPower(pathindex,maxpower#)
                Path.TPath = Object.TPath(pathindex)
                If Path<>Null
                        Path\maxpower = maxpower
                End If
        End Function

        Function Path_SetX(pathindex,x#)
                Path.TPath = Object.TPath(pathindex)
                If Path<>Null
                        Path\plotx = x
                End If
        End Function

        Function Path_SetY(pathindex,y#)
                Path.TPath = Object.TPath(pathindex)
                If Path<>Null
                        Path\ploty = y
                End If
        End Function

        Function Path_GetAngle#(pathindex)
                Path.TPath = Object.TPath(pathindex)
                If Path<>Null
                        Return Path\angle
                End If
        End Function

        Function Path_GetPower#(pathindex)
                Path.TPath = Object.TPath(pathindex)
                If Path<>Null
                        Return Path\power
                End If
        End Function

        Function Path_GetMaxPower#(pathindex)
                Path.TPath = Object.TPath(pathindex)
                If Path<>Null
                        Return Path\maxpower
                End If
        End Function

        Function Path_GetX#(pathindex)
        Path.TPath = Object.TPath(pathindex)
        If Path<>Null
                Return Path\plotx
        End If
        End Function

        Function Path_GetY#(pathindex)
                Path.TPath = Object.TPath(pathindex)
                If Path<>Null
                        Return Path\ploty
                End If
        End Function

        Function Path_GetXOld#(pathindex)
        Path.TPath = Object.TPath(pathindex)
        If Path<>Null
                Return Path\plotxold
        End If
        End Function

        Function Path_GetYOld#(pathindex)
                Path.TPath = Object.TPath(pathindex)
                If Path<>Null
                        Return Path\plotyold
                End If
        End Function

Function Path_Update(timecoef#=1)
        For Path.TPath = Each TPath
                Path\plotxold = Path\plotx
                Path\plotyold = Path\ploty
               
                Path\angle = Path\angle + (Path\maxpower/Path\power)*timecoef
                If Path\angle > 90 Then Path\angle = 90
               
                Path\plotx = Path\plotx+Cos(Path\angle)*Path\power*timecoef
                Path\ploty = Path\ploty+Sin(Path\angle)*Path\power*timecoef
               
        Next
End Function

Упд:
Path_Add(angle#,power#,maxpower#,x#=0,y#=0) где angle - угол поворота, power - сила, maxpower - максимальная сила, x и y соотв. координаты
Добавляет траекторию и возвращает хендл.

Path_Delete(pathindex) где pathindex - хендл траектории
Удаляет траекторию

Path_SetAngle(pathindex,angle#) где pathindex - хендл, а angle - угол поворота
Устанавливает поворот

Path_SetPower(pathindex,power#) где pathindex - хендл, а power - сила
Устанавливает силу

Path_SetMaxPower(pathindex,maxpower#) где pathindex - хендл, а maxpower - макс. сила
Устанавливает макс. силу

Path_SetX(pathindex,x#) где pathindex - хендл, а x - соотв. координата
Устанавливает x координату

Path_SetY(pathindex,x#) где pathindex - хендл, а y - соотв. координата
Устанавливает y координату

Path_GetAngle(pathindex) где pathindex - хендл
Возвращает поворот

Path_GetPower(pathindex) где pathindex - хендл
Возвращает силу

Path_GetMaxPower(pathindex) где pathindex - хендл
Возвращает макс. силу

Path_GetX(pathindex) где pathindex - хендл
Возвращает x координату

Path_GetY(pathindex) где pathindex - хендл
Возвращает y координату

Path_GetXOld(pathindex) где pathindex - хендл
Возвращает доапдейтовую(старую) x координату

Path_GetYOld(pathindex) где pathindex - хендл
Возвращает доапдейтовую(старую) y координату

Path_Update(timecoef#=1) где timecoef - коэфициент скорости времени
Обновление

impersonalis 19.09.2010 23:57

Ответ: Траектория полета
 
проутпил - пыщьщпыщь я
идиойд@собакойд

дели@умножай / * добавляй@вычитай +-

IGR 20.09.2010 00:03

Ответ: Траектория полета
 
хм.. Если уж пост в полезных функциях, то следовало бы ожидать что ты выложишь функу которая на входе получает точку начала движения, точку канчала движения, плюс параметры управляющие траекторией !! Так не ж тут кусок кода твоей игры без объяснений и камментов !! Не считаю полезным копатся в этом коде !!

Пс: в принципе код хорошо читаемый !! Без особого быдлоприкладства !! даешь описание и будет полезно !! :)


Часовой пояс GMT +4, время: 10:18.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot