Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2012, 12:39   #31
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Гром, из темки про игры в дельфи перешёл сюда, странно, но, не довелось эту тему читать, хотя раздел вроде как весь прошерстил.

Игра понравилась, интересно сделан антураж, да и исполнение на высоте (конечно, учитывая, что в графике Ваш уровень невысок, но сделано с душой: полутона, мелочи), хелпник доставляет.

В темке уважаемые программисты обсуждают на мой взгляд несущественные программные моменты (физмодель перемещения, отрисовку, таймеры), меня же заинтересовал самый, на мой взгляд, существенный - попиксельная интеракция в движке (это легко заметить по кнопочкам стрелок-меча, она подсвечивается именно в месте соприкосновения курсора с картинкой меча, а не ректом или какой другой вычисляемой областью). Поскольку делано на канве, то я предположу, что сделано руками, а не движком. Интересно как Вы это сделали (я сам такое сделал у себя в проекте), обменяться так сказать премудростями.
Я могу пока что предположить 2 варианта, первый - по ректу (полный цикл по объектам на экране с перебором координат) вычисляется над каким объектом сейчас мышь и для картинки объекта производится проверка на цвет пикселя - "прозрачный" или нет (по координатам мыши и ректу объекта сопоставляя с картинкой или её маской в памяти), если нет то активируется действие.
Второй вариант - для кадра заготавливается маска кадра, где некий буфер размером с экран хранит индексы объектов согласно маске картинки, т.е. на итоговом буфере каждая точка соответствует координатам на кадре и если на данных координатах лежит "непрозрачная" точка объекта, то храним индекс объекта и к нему обращаемся для интеракции.

Вот такие у меня мысли, прошу рассказать как оно по факту.
phomm вне форума Ответить с цитированием
Старый 16.03.2012, 16:02   #32
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

phomm, да, все сделано вручную, наведение курсора на объект меню осуществляется по первому варианту (только в противоположном порядке). Проверяется цвет пикселя под курсором (прозрачный или нет), если непрозрачный - проверяем, над каким объектом курсор находится (по прямоугольной области) и запоминаем это. При рисовании или нажатии кнопки мыши учитываем.
Еще, кстати, в недрах соответствующих функций происходит проверка необходимости перерисовки (если курсор только что был над элементом, а теперь - нет; и наоборот), и рисуем только если картинка должна быть изменена.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 16.03.2012, 22:34   #33
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

У меня ближе ко второму варианту.

Весь кадр представляет из себя буфер куда рисуется иерархия объектов, послойно (одна группа из иерархии - это бэки - они рисуются на самый нижний слой и из этого слоя производится вырезка подложек для изменившихся объектов), остальные объекты маскируются попиксельно и записываются ссылками в объект контейнер, при изменениях перерисовываются. При взаимодействии объектов с мышкой или друг с другом они получают оповещение и как-то реагируют, согласно своему классу. Плюс ещё на объекты можно подвязать реакцию на клавиатуру. Плюс есть реакции на таймер и т.п. подсистемы.
Таким образом строится пиксельно-активный интерфейс, который имеет разнообразное поведение, но все обрабатывается в контейнере, получается очень малый клиентский код.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pacman Merkator Gamedev - cоздание игр: Unity, OpenGL, DirectX 13 12.02.2011 13:58
Прошу чуточку помочь. пишу игру Pacman на Turbo C++... Олегус Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 20.05.2009 23:57
Пишу Pacman. Нужна помощь. AngelOfDeath Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 07.10.2008 14:34