|
01.09.2008, 21:57
|
#1
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Вид от третьего лица - изображение ТРЯСЁТСЯ...
Добрый день)
Делаю вид от третьего лица в своей игре. Я знаю лишь один алгоритм, как это можно сделать...Алгоритм который приедлагался создателями DARKBasic в их мануале... Теперь я хочу портировать свою игру с DBPro на блитз... Многих функций, которые необходимы мне для вида от третьего лица в блитце нет((( Тогда я написал их в код сам...ТОчнее две функции мне дал HolyDel, а одну я сам попытался написать... вообщем-то в ней вся и проблема!!!
Моя функция предназначена для поинтирования(направления) объекта на определённую точку 3д простанства! (НЕ ОБЪЕКТА НА ОБЪЕКТ)
Вот код
Graphics3D 1280,1024,32,1
SetBuffer BackBuffer()
SeedRnd (MilliSecs())
;make camera
Global cam=CreateCamera()
CameraRange cam,5,30000
;make light
lit=CreateLight()
;make player
player = CreateSphere()
ScaleEntity player, 40, 40, 40
PositionEntity player,-9000, 100, -9000
RotateEntity player, 0, -45, 0
;make 50 random cubes
For i = 1 To 50
n = n + i
n=CreateCube()
ScaleEntity n, Rand(40,100) , Rand(40,100), Rand(40,100)
PositionEntity n, Rand(1, 3002), 0,Rand(1,3002)
Next
;cube for my function
Global pointdot=CreateCube()
Repeat
;move sphere
playermove#=0
If KeyDown(200)=1
playermove#=0.2
EndIf
If KeyDown(208)=1
playermove#=-0.2
EndIf
MoveEntity player, 0, 0, playermove#
;position camera
ay# = EntityYaw#(player)
x#=MouseXSpeed()*0.25
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
RotateEntity player, 0, ay# - x#, 0
PositionEntity cam, NewXValue(EntityX(player),-aY#-180,200),EntityY(player)+80 + 40, NewZValue(EntityZ(player),-aY#-180,200)
;задаем переменную режима камеры
If KeyHit(28)=1
If cammode=0
cammode = 1
Else
cammode=0
EndIf
EndIf
;Поинтируем камеру...
If cammode = 0
DotPoint cam, EntityX(player), EntityY(player)+30, EntityZ(player)
Else
RotateEntity cam, 0, ay# - x#, 0
EndIf
UpdateWorld
RenderWorld
Flip 0
Until KeyHit(1)
End
;Эти две функции нужны для вида от третьего лица..
Function NewXValue(old#,angle#,steps#)
Return old#+Sin(angle#)*steps#
End Function
Function NewZValue(old#,angle#,steps#)
Return old#+Cos(angle#)*steps#
End Function
; Вот она - ГЛЮЧНАЯ функция, которую я написал сам...Из за неё трясётся изображение((((
Function DotPoint(entity, x#, y#, z#)
PositionEntity pointdot, x#, y#, z#
PointEntity entity, pointdot
End Function
Проблема в том, что изза моей ф-ии "DotPoint" трясётся изображение...или камера... вообщем вы сами можете всё увидеть просто запустите код(кубики на заднем плане сильно дёргаются!)... если же исключить мою функцию(нажмите ентер), то изображение трястить перестанет... я не понимаю почему...(((
Код с комментариями! Помогите разобраться! Буду очень благодарен!
|
(Offline)
|
|
01.09.2008, 22:01
|
#2
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Вид от третьего лица - изображение ТРЯСЁТСЯ...
в моих ф-ях тоже ошибка. надо так:
Function NewXValue#(old#,angle#,steps#)
Return old#+Sin(angle#)*steps#
End Function
Function NewZValue#(old#,angle#,steps#)
Return old#+Cos(angle#)*steps#
End Function
|
(Offline)
|
|
01.09.2008, 22:09
|
#3
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Вид от третьего лица - изображение ТРЯСЁТСЯ...
дело в том что функции NewXValue и NewZValue возвращают целочисленные значения, а тебе нужны дробные, для того чтобы функция возвращала нужный тебе тип данных нужно в строке
Function NewXValue()
добавить в конце названия знак, определяющий тип данных ( в блитце по умолчанию всегда стоит Int то есть целочисленный, # - дробный, $ - строковый )
Function NewXValue#()
Если хочешь получить угол наклона от объекта на объект то используй команды VectorYaw и VectorPitch, они возвращают угол из вектора. Вот функция:
Function PointEntToCoords(entity, x#, y#, z#)
local yaw#, pitch#
local dx#, dy#, dz#
dx = x - EntityX(entity,1)
dy = y - EntityY(entity,1)
dz = z - EntityZ(entity,1)
yaw = VectorYaw( dx, dy, dz )
pitch = VectorPitch( dx, dy, dz )
RotateEntity entity, pitch, yaw, 0
end Function
Edit: Холи тут как тут ))
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
01.09.2008, 22:17
|
#4
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Вид от третьего лица - изображение ТРЯСЁТСЯ...
HolyDel, H@NON, огромное вам спасибо! Теперь всё окей!
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:11.
|