forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Скорость юнита (http://forum.boolean.name/showthread.php?t=8371)

NitE 25.05.2009 18:02

Ответ: Скорость юнита
 
не знаю о чем развговор, но глянь это http://forum.boolean.name/showthread...E5%EA%F2%EE%F0

Damp 25.05.2009 19:01

Ответ: Скорость юнита
 
Чтоб не заводить новую тему, о повороте.
Хэлп плиз, что тут не так... ни чего в голову не идет, как этот косяк обойти.
============Copy==============
;чтобы засечь глюк, нужно сразу после загрузки
;кликнуть ровно сзади `юнита`
;а он падла поедет вперд :(
;при втором типе поворота вообще кавардак,
;хотя теоретически должно быть все в елочку
Graphics3D 1024,768,0,1
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,10,-10
RotateEntity CreateLight (),33,33,0

Global TempPivot=CreatePivot ()

Land=CreatePlane () : EntityColor Land,0,100,0 : EntityPickMode Land,2

Unit=CreateCube () : ScaleEntity Unit,.5,.5,1 : EntityColor Unit,0,0,100

WayPoint=CreateCube () : ScaleEntity WayPoint,.05,1,.05 : EntityColor WayPoint,100,0,0

PointEntity camera,Unit

Trigger=-1

Repeat;======

If MouseHit (1)
CP=CameraPick (camera,MouseX(),MouseY())
If CP
PX%=PickedX()
PZ%=PickedZ()
PositionEntity WayPoint,PX,0,PZ
EndIf
EndIf

d#=EntityDistance(Unit,WayPoint)
If d#>0.1
If Trigger<0
Align1(Unit, WayPoint, 0.15)
Else
Align2(Unit, WayPoint, 0.15)
EndIf
MoveEntity Unit,0,0,0.1
EndIf

If KeyHit (57) Trigger=-1*Trigger ;пробелом

RenderWorld

Rect MouseX(),MouseY(),2,2

If Trigger<0
Text 50,50, "Align1"
Else
Text 50,50, "Align2"
EndIf
Flip
Until KeyHit(1) ;======
End

Function Align1(Entity, WP, AlignRate#)
dx#=EntityX(WP,1) - EntityX(Entity,1)
dz#=EntityZ(WP,1) - EntityZ(Entity,1)
AlignToVector Entity, dx, 0, dz , 3 , AlignRate#
RotateEntity Entity,0,EntityYaw (Entity,1),0,1 ; чтоб не перевернуло, не влияет на баг с поворотом
End Function

Function Align2(Entity, WP, AlignRate#)
PositionEntity TempPivot , EntityX(Entity,1) , 0 , EntityZ(Entity,1),1
PointEntity TempPivot,WP
Yaw#= ( EntityYaw(TempPivot,1) - EntityYaw(Entity,1) ) *AlignRate#
TurnEntity Entity,0,Yaw#,0
End Function
============Past==============

karry 25.05.2009 20:13

Ответ: Скорость юнита
 
Нет, послушайте, это чокнуться можно, два дня уже сижу не могу сделать плавный поворот.

Пробовал через Atan2 - так он только к глобальной системе координат применяется, как его использовать в связке с системой координат юнита - х.з.

Пробовал через DeltaYaw - та же хрень, ну неправильно угол определяется !!!
Вот откопал на форуме кусок кода, HolyDel пишет :
Код:

function smoothturn(ent1,ent2,speed# = 1)
s# = DeltaYaw(ent1,ent2)
turnentity ent1,0,speed * sign(s),0
endfunction

И таки-да, вращается, в нужную сторону, но стоит добавить условие когда он должен остановить вращение - и всё рассыпается.

МЛЯ !!! Мозги кипят.

Damp 27.05.2009 09:25

Ответ: Скорость юнита
 
Нашел способ избавиться от косяка.
Поворот с AlignToVector, но нужно чтоб вэйпоинт менял свое положение в близи своих координат. Причем чем дальше он от юнита, тем сильнее должно быть отклонение, т.е. пропорционально дистанции.
Способ странный, но надежно работает.

karry 27.05.2009 12:15

Ответ: Скорость юнита
 
Я сделал через сравнение Yaw. Примерно 1 раз из 10 глючит, но всё же лучше чем ничего.


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

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