22.12.2013, 13:28
|
#5
|
ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Ответ: (ИИ)RTS... передвижение юнитов по клику
Дабы не создавать новую тему ,решил выложить здесь, тем более тема близка.
Основывался на статью Эту
Плавный поворот на точку с указанной скоростью:
Код:
Dim cosA#(360)
Dim sinA#(360)
For i# = 0.0 To 360.0 Step 0.0001
cosA(i#)= Cos(i#)
sinA(i#)= Sin(i#)
Next
Function breakAngle#(AngleBreak#=0)
If AngleBreak#< 0
AngleBreak#= 360 + AngleBreak#
ElseIf AngleBreak#>= 360
AngleBreak#= AngleBreak# -360
EndIf
Return AngleBreak#
End Function
Graphics 800,600,32,2
SetBuffer BackBuffer()
x=200 : y=200
rotation# =10
While Not KeyHit(1)
Cls
mx# = MouseX():my#=MouseY()
rotation# = SmoothRotate(x,y ,mx ,my ,rotation# ,1 )
Text 20,20,"rotation "+rotation
Color 25,25,25
Line x,y,mx , my
Color 255,255,255
Line x,y,x+45*Cosa(rotation) , y+45*Sina(rotation)
Oval x-5+45*Cosa(rotation) , y-5+45*Sina(rotation),10,10
Flip
Wend
End
Function SmoothRotate#(bodyx#,bodyy# ,bodyx2# ,bodyy2# ,bodyrotation# ,rotToMouseSpeed#=0.1 )
If rotationSpeed < 0.0001 Then rotationSpeed =0.0001
mDx# = bodyx2- bodyx;
mDy# = bodyy2- bodyy;
mAngle# = ATan2(mDy, mDx);
;сколько градусов нехватает для полного поворота на мышь
dAngleD# = bodyrotation - mAngle;
dAngleD# =breakAngle#(dAngleD)
; If (dAngleD < 0)
; dAngleD = 360 + dAngleD;
; Else If (dAngleD > 360)
; dAngleD = dAngleD - 360 ;
; EndIf
Text 20,40,"dAngleD "+dAngleD
;поворачиваем башню с нашей скоростью
If ((dAngleD)<=rotToMouseSpeed)
bodyrotation =mAngle
Else
If(dAngleD < 180)
bodyrotation = bodyrotation - rotToMouseSpeed;
Else If (dAngleD > 180)
bodyrotation = bodyrotation + rotToMouseSpeed;
EndIf
EndIf
bodyrotation# =breakAngle#(bodyrotation)
; If (bodyrotation < 0)
; bodyrotation = 360 + bodyrotation ;
; Else If (bodyrotation >= 360)
; bodyrotation = bodyrotation - 360 ;
; EndIf
Return bodyrotation
End Function
__________________
Мой проект здесь
|
(Offline)
|
|