Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вращение камеры (http://www.flasher.ru/forum/showthread.php?t=137642)

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

Цитата:

Сообщение от AlexDesinger (Сообщение 894139)
вот мне интересно, вы не могли бы хотя бы в общих чертах рассказать каким способом вы разработали простенький 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

Вложений: 1
Цитата:

Сообщение от GentleFLASH (Сообщение 894328)
Маловероятно, это все таки небезопасно давать программе мышку перемещать.

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

Цитата:

Сообщение от AlexDesinger (Сообщение 895198)
ну тогда можно в начале игры предложить юзеру два варианта - перейти в полноэкранный режим, либо при отказе использовать только кнопки клавиатуры и запретить мышь.

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

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


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.