Показать сообщение отдельно
Старый 22.12.2013, 13:28   #5
polopok
ПроЭктировщик
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pepel (26.12.2013)