Сообщение от mr.DIMAS
Затем чтобы идти вперед, а не лететь туда куда смотришь
|
Ну так возьми вектор направления камеры ( после поворота, с помощью GetMatElement ) и двигайся как требуется
т.е.
клавишами вперед\назад двигай по этому вектору исключая ось Y
клавишами стрейфа двигай по перпендикуляру к этому вектору, тоже исключая ось Y
как-то так:
Local DirectionX# = GetMatElement( Camera, 2, 0 )
Local DirectionZ# = GetMatElement( Camera, 2, 2 )
Local MovingX# = 0
Local MovingZ# = 0
; вперед
If KeyDown( 17 ) Then
MovingX = MovingX + DirectionX
MovingZ = MovingZ + DirectionZ
End If
; назад
If KeyDown( 31 ) Then
MovingX = MovingX - DirectionX
MovingZ = MovingZ - DirectionZ
End If
; влево
If KeyDown( 30 ) Then
MovingX = MovingX - DirectionZ
MovingZ = MovingZ + DirectionX
End If
; вправо
If KeyDown( 32 ) Then
MovingX = MovingX + DirectionZ
MovingZ = MovingZ - DirectionX
End If
; нормализуем
Local MovingLength# = MovingX * MovingX + MovingZ * MovingZ
If ( MovingLength > 1.0 ) Then
Local MovingInverseLength# = 1.0 / Sqr( MovingLength )
MovingX = MovingX * MovingInverseLength
MovingZ = MovingZ * MovingInverseLength
End If
;двигаем
TranslateEntity( Camera, MovingX, 0, MovingZ )
Ну и тут уже недалеко до нормального FPS перемещения - Moving используем для ускорения, аккумулируем скорость по ускорению, скорость ограничиваем, применяем трение, а по оси Y двигаем гравитацией + прыжок ( причем все это одним TranslateEntity )