Показать сообщение отдельно
Старый 24.06.2012, 23:12   #4
Hartmann1
AnyKey`щик
 
Регистрация: 24.06.2012
Сообщений: 16
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Правильное ограничение угла поворота камеры

Сообщение от 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 )
(Offline)
 
Ответить с цитированием