Хочеться сделать что-то типа поведения вертолета в GTA:VC, Operation Flashpoint.
Тоесть нечто не слишком сложное для игрока.
Сделал так:
if Keys.KeyPressed(KP_FORWARD) then begin
Accelerate:=Accelerate+dt/1000*100;
end
else
if Keys.KeyPressed(KP_BACKWARD) or (Speed.Z>10) then begin
Accelerate:=Accelerate-dt/1000*100;
end
else begin
if Accelerate>0 then
Accelerate:=Accelerate-dt/1000*40
else
Accelerate:=Accelerate+dt/1000*40;
end;
if Accelerate>100 then
Accelerate:=100;
if Accelerate<-50 then
Accelerate:=-50;
Accelerate - скорость вращений винтов. Больше нуля - значит взлетает, меньше - садится.
Speed.Z:=Speed.Z + (90-Value)/90 * Accelerate*dt/1000-30*dt/1000;
if Speed.Z>50 then
Speed.Z:=50;
Speed.X := Speed.X + sin(Direction.Y*pi/180)*(Value)/90 * Accelerate*dt/1000;
Speed.Y := Speed.Y + cos(Direction.Y*pi/180)*(Value)/90 * Accelerate*dt/1000;
if MagnitudeVector(Speed)>200 then
Speed:=ScaleVector(NormalizeVector(Speed),200);
Position:=AddVector(Position,ScaleVector(Speed,dt/1000));
Value - угол наклона вертолета. от -60 до 60. 0 - паралельно земле.
Может у кого есть идеи, как улучшить поведение.
Понятно, что без теста это сложно сказать, но всеже, возможно кто-то решал сходные задачи.