Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 01.09.2008, 21:57   #1
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 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
HolyDel
 
Регистрация: 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
H@NON
Дэвелопер
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (01.09.2008)
Старый 01.09.2008, 22:17   #4
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: Вид от третьего лица - изображение ТРЯСЁТСЯ...

HolyDel, H@NON, огромное вам спасибо! Теперь всё окей!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вид от третьего лица и камера Unodeya 3D-программирование 3 25.05.2009 14:40
Ищу изображение башен top-down (фото,рис,pixelart) Trilliput Болтовня 0 08.12.2007 19:03
Изображение AndruXa Blitz3D 16 06.12.2007 18:49
Вид от третего лица Packman 3D-программирование 5 26.10.2007 11:45
Проект с нуля. 3д РПГ от 3-го лица. Duda Проекты на Blitz3D 5 17.02.2007 12:48


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com