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

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

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

Ответ
 
Опции темы
Старый 02.01.2010, 00:29   #1
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
ограничение мышки по вертикали

Вот зделал управление мышкой, всё работает.
Только вот немогу ограничить камеру, тоесть когда ведеш мышку вперёд
камера крутилась по оси х но не полный круг,а частично,
попытался зделать кое-какое ограничени но оно плохо работает:

Graphics3D 640,480
SetBuffer BackBuffer()

player = CreateSphere(
camera = CreateCamera(player)
PositionEntity camera,0,1.5,0

pol = CreateTerrain(32)
PositionEntity pol,0,-1,0

For x=1 To 10
cub = CreateCube()
PositionEntity cub,Rand(0,32),0,Rand(0,32)
EntityColor cub,Rand(0,255),Rand(0,255),Rand(0,255)
Next

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

While Not KeyDown(1)

x = MouseXSpeed()
y = MouseYSpeed()

xg = GraphicsWidth()/2
yg = GraphicsHeight()/2

If x<0 Then MoveMouse xg,yg
If x>0 Then MoveMouse xg,yg
If y<0 Then MoveMouse xg,yg
If y>0 Then MoveMouse xg,yg

limit = EntityPitch(camera,True)

TurnEntity player,0,-x,0
If limit > -25 And limit < 70 Then TurnEntity camera,y,0,0
; вот я пытался зделать ограничение
If KeyDown(200) Then MoveEntity player,0,0,0.1
If KeyDown(20 Then MoveEntity player,0,0,-0.1
If KeyDown(203) Then MoveEntity player,-0.1,0,0
If KeyDown(205) Then MoveEntity player,0.1,0,0

UpdateWorld
RenderWorld
Text 10,10,limit
Flip
Wend
End
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 02.01.2010, 01:00   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: ограничение мышки по вертикали

Заведи переменную CamPitch, затем меняй её в зависимости от скорости движения мышки по Y.
Далее проверяй, если например тебе нужно ограничить по 70 градусов вниз и вверх то можно так:
If Abs(CamPitch)>70 CamPitch=70*Sgn(CamPitch)
После этого крутишь камеру:
RotateEntity camera,CamPitch,EntityYaw(camera,1),0,1
(Offline)
 
Ответить с цитированием
Старый 02.01.2010, 01:06   #3
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: ограничение мышки по вертикали

Как только камера заходит за границы по условию она уже не может повернуться. Надо как-нибудь вроде:
If y>0 Then 
    If limit<70 Then TurnEntity camera,y,0,0
Else
    If limit>-25 Then TurnEntity camera,y,0,0
EndIf
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 02.01.2010, 01:37   #4
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: ограничение мышки по вертикали

FireOwl, так это не делается. Тут вылезут баги, например при редком цикле (низкий фпс, если упс не фиксированный), при сильной скорости мышки, по вертикали, камера может проскачить от 70, до 90, и дальше, уже Yaw обернётся, на 180 градусов. А Pitch пойдёт от остатка на убывание.
Короче говоря, если вам не нужны баги, выносите градус по вертикали в отдельную переменную, и работайте с ней. Тем более хоть и о производительности в таких вещах задумываться - через-чур мелочёвка, но работать с переменной быстрее, чем выбирать, и получать Pitch от энтити.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
BlackOut (02.01.2010)
Старый 02.01.2010, 01:56   #5
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
Ответ: ограничение мышки по вертикали

Сообщение от MoKa Посмотреть сообщение
Заведи переменную CamPitch, затем меняй её в зависимости от скорости движения мышки по Y.
можно подробнее описать ету строчку
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 02.01.2010, 01:59   #6
Morganolla
Бывалый
 
Аватар для Morganolla
 
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений
(для 245 пользователей)
Ответ: ограничение мышки по вертикали

вот я переделал...
Graphics3D 640,480
SetBuffer BackBuffer()

player = CreateSphere()
camera = CreateCamera(player)
PositionEntity camera,0,1.5,0

pol = CreateTerrain(32)
PositionEntity pol,0,-1,0

For x=1 To 10
cub = CreateCube()
PositionEntity cub,Rand(0,32),0,Rand(0,32)
EntityColor cub,Rand(0,255),Rand(0,255),Rand(0,255)
Next

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

While Not KeyDown(1)

x = MouseXSpeed()
y = MouseYSpeed()

xg = GraphicsWidth()/2
yg = GraphicsHeight()/2

If x<0 Then MoveMouse xg,yg
If x>0 Then MoveMouse xg,yg
If y<0 Then MoveMouse xg,yg
If y>0 Then MoveMouse xg,yg



TurnEntity player,0,-x,0
TurnEntity camera,y,0,0; вот я пытался зделать ограничение
limit = EntityPitch(camera,True)
If limit < -25 RotateEntity camera,-25,0,0
If limit >70 RotateEntity camera,70,0,0
If KeyDown(200) Then MoveEntity player,0,0,0.1
If KeyDown(208) Then MoveEntity player,0,0,-0.1
If KeyDown(203) Then MoveEntity player,-0.1,0,0
If KeyDown(205) Then MoveEntity player,0.1,0,0

UpdateWorld
RenderWorld
Text 10,10,limit
Flip
Wend
End
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
KingMaks (02.01.2010)
Старый 02.01.2010, 02:08   #7
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
Ответ: ограничение мышки по вертикали

все оказалось куда проще чем я думал
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 02.01.2010, 02:09   #8
Morganolla
Бывалый
 
Аватар для Morganolla
 
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений
(для 245 пользователей)
Ответ: ограничение мышки по вертикали

ЗЫ Приятель, а шо у тебя с глазом?
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
BlackOut (02.01.2010)
Старый 02.01.2010, 02:17   #9
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
Ответ: ограничение мышки по вертикали

в фотошопе зделал
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 02.01.2010, 20:00   #10
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: ограничение мышки по вертикали

Morganolla, снова лишние операции.
Global wW=640,wH=640

Graphics3D wW,wH,32,2
SetBuffer BackBuffer()

player = CreatePivot()
camera = CreateCamera(player)
PositionEntity camera,0,1.5,0

pol = CreateTerrain(1)
PositionEntity pol,0,-1,0
ScaleEntity pol,32,32,32

For x=1 To 10
	cub = CreateCube()
	PositionEntity cub,Rand(0,32),0,Rand(0,32)
	EntityColor cub,Rand(0,255),Rand(0,255),Rand(0,255)
Next

CamPitch=0
CamSensivity#=.3
CamSpeed#=.05

MoveMouse wW/2.0,wH/2.0

While Not KeyDown(1)
	IKdUp=KeyDown(200)
	IKdDown=KeyDown(208)
	IKdLeft=KeyDown(203)
	IKdRight=KeyDown(205)
	
	mX=MouseXSpeed()
	mY=MouseYSpeed()
	MoveMouse wW/2.0,wH/2.0
	
	TurnEntity player,0,-mX*CamSensivity,0
	
	CamPitch=CamPitch+mY*CamSensivity
	If Abs(CamPitch)>70 CamPitch=Sgn(CamPitch)*70
	RotateEntity camera,CamPitch,EntityYaw(camera),0
	
	MoveEntity player,(IKdRight-IKdLeft)*CamSpeed,0,(IKdUp-IKdDown)*CamSpeed
	
	UpdateWorld
	RenderWorld
	Text 10,10,CamPitch
	Flip 0
Wend
End
Вот теперь, логически правильно, а багов не вылезет.
ЗЫ, ограничивать вниз на 25 градусов, весьма бесюче, и заметь, что везде от этого отказываются.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
KingMaks (02.01.2010)
Старый 02.01.2010, 20:12   #11
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
Ответ: ограничение мышки по вертикали

Сообщение от MoKa Посмотреть сообщение
ЗЫ, ограничивать вниз на 25 градусов, весьма бесюче, и заметь, что везде от этого отказываются.
так мне же не для игры ограничивать, я так учусь всякие мелочи делать.
И если уж на то пошло, то на сколько нужно ограничивать, если вопще нужно? ИМХО не может же игрок крутить шею на все 360 по оси Х
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 02.01.2010, 20:16   #12
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: ограничение мышки по вертикали

KingMaks, ну по горизонтали, в играх редко встречалось, когда в гемплее был элемент управления головой (лишь несколько военных симуляторов видел). Но там опять же, было даже не совсем головой крутили, а прицел оружия, ходил по экрану в небольшом радиусе вокруг центра экрана, далее заходя, уже крутилось тело.
В FPS играх, крутят сразу тело, а не голову
По вертикали - голова, по горизонтали - тело.
Ты можешь вообще смотреть очень низко, опустить голову почти на 90 градусов, не так ли? При этом есть ещё зрачки, они тоже могут двигаться независимо от шеи, и самого тела, опять же, обзор по горизонтали будет почти 180 градусов!
Короче говоря, не ограничивают вниз, потому что во многих ситуациях, где нужно стрелять во время того же прыжка, или смотреть с крыши вниз, и представь, тебя тупо ограничат - выбесит
(Offline)
 
Ответить с цитированием
Старый 02.01.2010, 20:36   #13
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
Ответ: ограничение мышки по вертикали

По оси Y не нужно ограничивать это понятно.
Ну а по оси Х полный круг грех делать, хоть какоето ограничение нужно,
я в какие игры не играл там ,вроде, по 90 градусов вверх и низ.

(как в контре когда на край дома стаёш, разворачиваешься на 180
и смотриш вниз, ног не видно,вопщем получаеться что ты париш в воздухе)
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 02.01.2010, 20:42   #14
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: ограничение мышки по вертикали

KingMaks, 90 многовато, 89 делай, а то там будет камера беситься..
А вот насчёт тела, сейчас много где делают очень прикольно, мне понравилось как в Dark Messiah, там своё тело видно. И сам бой там кстати приятный .
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
BlackOut (02.01.2010)
Старый 02.01.2010, 21:01   #15
BlackOut
Кодер "win" ЭВМ
 
Аватар для BlackOut
 
Регистрация: 10.11.2009
Адрес: ЖуковSKY
Сообщений: 194
Написано 77 полезных сообщений
(для 155 пользователей)
Ответ: ограничение мышки по вертикали

MoKa
...сейчас много где делают очень прикольно..
Не смог удержаться,! 2002 год.. Французская студия.. игра Arx Fatalis! Жанр-Шедевр!
а то что шас делают много прикольного, к сожалению не соглашусь. Да что то есть но и ерунды хватает =\
__________________
Жизнь игра, задумка дурацкая но графика ...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (02.01.2010)
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет и ограничение символов в Input() ArtemkA 2D-программирование 8 24.07.2009 02:37
Ограничение преремещения объекта областью видимости камеры Raiter 3D-программирование 2 10.01.2008 03:27
Ограничение наклона камеры в FPS Maxxx.!!!. 3D-программирование 21 28.12.2007 01:01
Проблемка. Не срабатывает ограничение 0.о Raiter 2D-программирование 2 27.10.2007 12:14
Ограничение по координатам Valet 2D-программирование 8 27.08.2007 23:45


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


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