Наверное, не надо было это выкладывать. Просто делаю игру типа 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 - коэфициент скорости времени
Обновление