PDA

Просмотр полной версии : Вращение камеры


nns2009
18.03.2010, 22:20
Создал недавно простенький 3d движок. Теперь хочу разработать с его использованием простенькую 3d игру: Ходишь человечком по лабиринту, стреляешь во врагов молниями, ищешь выход. Но есть проблема: персонаж и камера должны вращаться мышью(как в нормальных играх), но когда мышь достигнет края экрана, то и вращение перестанет происходить! Что делать???

AlexDesinger
18.03.2010, 22:39
ппц, мне это снится или этот пост написал человек, который создал простенький 3d движок?

nns2009
19.03.2010, 00:16
А что такого особенного? Вращение должно происходить в каждую из сторон сколько угодно, а если просто скрыть указатель мыши и отслеживать MOUSE_MOVE, то когда мышь достигнет конца экрана, вращение закончится! Вот в этом и проблема!

VVall
19.03.2010, 00:40
Что делать - придумать способ управления, учитывающий возможность выхода указателя мыши за пределы окна. Больше ничего не сделать.

AlexDesinger
19.03.2010, 09:56
Вот в этом и проблема!
вот мне интересно, вы не могли бы хотя бы в общих чертах рассказать каким способом вы разработали простенький 3d движок, а я в замен расскажу вам какой слушатель отвечает за вашу проблему?

GentleFLASH
19.03.2010, 14:23
мышку перемещать средствами флэша нельзя. Делают либо клавиатурными стрелками кручение, либо мышкой так, чтобы при повороте от начала экрана до конца, камера сделала как минимум пововорот на 360 градусов или даже больше. Еще вариант - крутить зажимая мышь: зажал и тащишь - поворачивается, как уперся в предел экрана - отжимаешь и перемещаешь мышь, снова зажимаешь и поворачиваешься, и т.д

nns2009
20.03.2010, 00:30
вот мне интересно, вы не могли бы хотя бы в общих чертах рассказать каким способом вы разработали простенький 3d движок, а я в замен расскажу вам какой слушатель отвечает за вашу проблему?
Главное направление моего движка не скорость и графика, а удобство использования, поэтому:
1) Ось z направлена вертикально вверх, x - вглубь экрана, y - справо налево.
Да, не очень по стандартному.
2) Отображение графики идёт как в AS 3.0, то есть создаём контейнер, в него можем добавить другой контейнер, в него парочку треугольников, а во время present() все добавленные в иерархию фигуры отображаются с учётом преобразований родительских контейнеров.
3) Писал без матриц, руководствуясь собственным воображением.
Что бы повернуть объект вокруг оси z, устанавливаем контейнеру нужное значение horizontalRotation, для дополнительного поворота - verticalRotation.
4) Добавил объект четырёхугольник.
Но к сожалению, из-за низкой скорости работы ActionScript 3.0 с массивами, мне не удалось организовать z-буфер: при наличии на сцене 6 треугольников(полукуб(1 треугольник на сторону)) сцена жутко тормозила, поэтому я использовал алгоритм художника.

Мне кстати понравился способ с зажиманием мыши. И встречный вопрос перемещать мышь Flash Playerом нельзя, а Adobe AIRом? Можно ли как-нибудь отловить нажатие клавиш джойстика(вида, как у PS), хотя бы в AIRе.

СлаваRa
20.03.2010, 00:47
а можно демку посмотреть?

GentleFLASH
20.03.2010, 00:48
Маловероятно, это все таки небезопасно давать программе мышку перемещать. Если речь идет об exe оболочке для винды, то предлагаю посмотреть в сторону C#. Им без проблем можно отобразить флэш контент, и мышку он умеет перемещать + с ним можно связать флэшку через ExternalInterface. Т.е можно из самой флэхи вызывать Сишарповские функции, по-моему вариант неплохой. Тогда и зажимать мышь не нужно будет

nns2009
20.03.2010, 00:56
Маловероятно, это все таки небезопасно давать программе мышку перемещать.
Adobe AIR - это уже не интернет плагин, а полноценная платформа(как C# и .NET), так что думаю там это сделать можно.

Выложил два примера: разноцветный куб, и одноцветный куб(за счёт примитивного освещения он более-менее объёмный). Первые три ползунка - оси x,y,z, 4-ый и 5-ый - horizontalRotation и verticalRotation.

GentleFLASH
20.03.2010, 01:24
Я в курсе, что такое Adobe AIR. Только вот до сих пор не встречал подобных функций по перемещению мышки. В самом классе Mouse вообще нет ни методов, ни свойств, отвечающих за позицию. Ни для SWF, ни для AIR. А в DisplayObject mouseX/Y как были readonly, так и остались. Так что буду рад услышать, если вы отыщите подобный функционал для Adobe AIR ;)

nns2009
22.03.2010, 00:17
Как вариант можно сделать, чтобы персонаж вращался при подведении мыши к краю экрана. А по поводу AIRа спрошу в соответсвующем разделе.

AlexDesinger
22.03.2010, 09:21
ну если вы разрабатываете на flash, то мышка так и так будет иметь возможность покинуть зону flashPlayer. За покидание экрана мышки отвечает MOSE_LEAVE, соответственно нужно обработать это событие и все. Так же можно использовать только клавиши и не использовать мышь.

К стати, не думал, что применение 3d трансформации во fp10+изменение положения MovieClip, теперь называется собственным 3d движком =)

Psycho Tiger
22.03.2010, 15:18
AlexDesigner, что вы к человеку пристали? Он может быть величайшим Java программистом и написать движок круче крайэнджина на флеше, но не знать тонкостей покидания мышки сцены - потому что не из этой области программист.
GentleFLASH, мышка всегда покинет область флешки. Даже если зажимать её она когда нибудь упрется в экран, и поверьте, это жутко неудобно конечному пользователю. Да и вообще, я считаю что шутер на флешере - гиблая затея.

AlexDesinger
22.03.2010, 15:39
Psycho Tiger
Да, видимо так и есть =)
К стати есть еще вариант предлагать юзеру переводить flash в полноэкранный режим, чтобы мышка не покидала flash)))

nns2009
23.03.2010, 22:19
Я в общем изначально собирался писать игру для полноэкранного режима.
Похоже действительно не очень удачная идея. Попробую воссоздать дендишные танчики.

К стати, все 3d трансформации прощитываются моим кодом, средства рисования 3d графики ActionScript 3.0 не используются.

AlexDesinger
23.03.2010, 23:22
полноэкранного режима.
ну тогда можно в начале игры предложить юзеру два варианта - перейти в полноэкранный режим, либо при отказе использовать только кнопки клавиатуры и запретить мышь.

К стати, все 3d трансформации прощитываются моим кодом, средства рисования 3d графики ActionScript 3.0 не используются.
А вот за это респект, видимо Psycho Tiger оказался прав =)

AL.exe
24.03.2010, 03:49
Дело было давно, но раньше была такая оболочка, называлась, по-моему, swfXXL. Она позволяла рендерить при помощи directdraw в полноэкранном режиме флешку и обладала каким-то API для перемещения курсора мыши.

В качестве рабочего примера можно попробовать поискать старую игру Krinkels'а - Madness Redeemer (вот уж юбоюсь, что ошибок наделал в названии) в этой оболочке скомпилированную.

AlexDesinger
24.03.2010, 12:48
к стати, я тут подумал - а зачем вам вообще эта заморочка с выходом мышки из-за пределов flashPlayer? Ну подумаешь юзер отвлекся от игры и переключил песню в winamp? Дык и сделайте ему паузу в игре, а от случайных вылетов можно подстраховаться - сделав поля по краям, ограничив внутри активную зону?

Psycho Tiger
24.03.2010, 16:07
Тогда камеру на 1020 не повертишь.

Ваисилй
18.03.2011, 13:24
ну тогда можно в начале игры предложить юзеру два варианта - перейти в полноэкранный режим, либо при отказе использовать только кнопки клавиатуры и запретить мышь.


Разве переход в полно экранный режим решает проблему автора???? Ведь курсором мыши всё равно управлять нельзя

Смотрю сообщения в этой теме достаточно старые. У меня щас таже проблема, до сих пор нет для неё решения?