|
02.01.2010, 00:29
|
#1
|
Знающий
Регистрация: 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
|
.
Регистрация: 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
|
Бывалый
Регистрация: 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
|
(Offline)
|
|
02.01.2010, 01:37
|
#4
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: ограничение мышки по вертикали
FireOwl, так это не делается. Тут вылезут баги, например при редком цикле (низкий фпс, если упс не фиксированный), при сильной скорости мышки, по вертикали, камера может проскачить от 70, до 90, и дальше, уже Yaw обернётся, на 180 градусов. А Pitch пойдёт от остатка на убывание.
Короче говоря, если вам не нужны баги, выносите градус по вертикали в отдельную переменную, и работайте с ней. Тем более хоть и о производительности в таких вещах задумываться - через-чур мелочёвка, но работать с переменной быстрее, чем выбирать, и получать Pitch от энтити.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.01.2010, 01:56
|
#5
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: ограничение мышки по вертикали
Сообщение от MoKa
Заведи переменную CamPitch, затем меняй её в зависимости от скорости движения мышки по Y.
|
можно подробнее описать ету строчку
__________________
StimuL
Maks
|
(Offline)
|
|
02.01.2010, 01:59
|
#6
|
Бывалый
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.01.2010, 02:08
|
#7
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: ограничение мышки по вертикали
все оказалось куда проще чем я думал
__________________
StimuL
Maks
|
(Offline)
|
|
02.01.2010, 02:09
|
#8
|
Бывалый
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений (для 245 пользователей)
|
Ответ: ограничение мышки по вертикали
ЗЫ Приятель, а шо у тебя с глазом?
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.01.2010, 02:17
|
#9
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: ограничение мышки по вертикали
в фотошопе зделал
__________________
StimuL
Maks
|
(Offline)
|
|
02.01.2010, 20:00
|
#10
|
.
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.01.2010, 20:12
|
#11
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: ограничение мышки по вертикали
Сообщение от MoKa
ЗЫ, ограничивать вниз на 25 градусов, весьма бесюче, и заметь, что везде от этого отказываются.
|
так мне же не для игры ограничивать, я так учусь всякие мелочи делать.
И если уж на то пошло, то на сколько нужно ограничивать, если вопще нужно? ИМХО не может же игрок крутить шею на все 360 по оси Х
__________________
StimuL
Maks
|
(Offline)
|
|
02.01.2010, 20:16
|
#12
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: ограничение мышки по вертикали
KingMaks, ну по горизонтали, в играх редко встречалось, когда в гемплее был элемент управления головой (лишь несколько военных симуляторов видел). Но там опять же, было даже не совсем головой крутили, а прицел оружия, ходил по экрану в небольшом радиусе вокруг центра экрана, далее заходя, уже крутилось тело.
В FPS играх, крутят сразу тело, а не голову
По вертикали - голова, по горизонтали - тело.
Ты можешь вообще смотреть очень низко, опустить голову почти на 90 градусов, не так ли? При этом есть ещё зрачки, они тоже могут двигаться независимо от шеи, и самого тела, опять же, обзор по горизонтали будет почти 180 градусов!
Короче говоря, не ограничивают вниз, потому что во многих ситуациях, где нужно стрелять во время того же прыжка, или смотреть с крыши вниз, и представь, тебя тупо ограничат - выбесит
|
(Offline)
|
|
02.01.2010, 20:36
|
#13
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: ограничение мышки по вертикали
По оси Y не нужно ограничивать это понятно.
Ну а по оси Х полный круг грех делать, хоть какоето ограничение нужно,
я в какие игры не играл там ,вроде, по 90 градусов вверх и низ.
(как в контре когда на край дома стаёш, разворачиваешься на 180
и смотриш вниз, ног не видно,вопщем получаеться что ты париш в воздухе)
__________________
StimuL
Maks
|
(Offline)
|
|
02.01.2010, 20:42
|
#14
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: ограничение мышки по вертикали
KingMaks, 90 многовато, 89 делай, а то там будет камера беситься..
А вот насчёт тела, сейчас много где делают очень прикольно, мне понравилось как в Dark Messiah, там своё тело видно. И сам бой там кстати приятный .
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.01.2010, 21:01
|
#15
|
Кодер "win" ЭВМ
Регистрация: 10.11.2009
Адрес: ЖуковSKY
Сообщений: 194
Написано 77 полезных сообщений (для 155 пользователей)
|
Ответ: ограничение мышки по вертикали
MoKa
...сейчас много где делают очень прикольно..
|
Не смог удержаться,! 2002 год.. Французская студия.. игра Arx Fatalis! Жанр-Шедевр!
а то что шас делают много прикольного, к сожалению не соглашусь. Да что то есть но и ерунды хватает =\
__________________
Жизнь игра, задумка дурацкая но графика ...
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:24.
|