![]() |
|
Модераторы: Rickert |
![]()
|
|
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
Вот решился. Игрушка будет видоизменяться и наращивать способности по мере повышения моего экспириенса. Для начала: одноэлементные кубики, никаких вспышек, работа в канвас.
Выбрал "стакан" средой обработки столкновений кубиков с полом, стенами, друг с другом. То есть функции элементов "физической" части будут выполняться в "стакане" (main, я думаю). Кубики будут представлять собой объекты, инкапсулирующие графические ресурсы (свое изображение в нормальном режиме и режиме уничтожения), звуковые ресурсы (звук падения на поверхность и звук уничтожения), геометрические размеры... Может быть еще какие механизмы (пока моя игровая логика слаба и пашет со скрежетом). Кое-какие вопросы: 1. Как организовать движение? В кубике функциями приращения координат (падения) и перерисовки или в среде (среда сама следит за движением кубиков) и через таймер? (лучше выразиться пока не могу). 2. Вопрос к первому. Как обновлять изображение? В тетрисе хорошо то, что в каждый момент времени движется только один объект. А если несколько? Все привязывать к единому таймеру или можно реализовать перерисовку каждого объекта поотдельности (тогда можно получить эффект мерцания)? Спасибо, что прочитали этот бред ничерта не понимающего энтузиаста. Надеюсь на дельный конструктив. |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
Ты просто должен каждый кадр рисовать с чистого листа и всё. Отчищая экран и опять рисуешь все элементы, по новым координатам. Функция отрисовки (в ней же, предварительно, очистка) срабатывает по таймеру, который ты задаёшь (25 раз в секунду - сам понимаешь - норма). Перед тем как отрисовать - просчитываешь всю аналитику игры: столкновения, падение кубика, появление нового и т.п.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
Rickert, это понимаю.
void Приростил_координату(); (в случает тетриса - координату падения y) флаг=bool Просчитал_столкновение(); истина - столкновение if(флаг) { Оставить объект; т.е. снять с объекта "фокус", чтобы игрок с ним уже не смог работать Создать новый объект; пока невидимый Перерисовать_канвас; } else Перерисовать_канвас; Где-то так себе представляю. Но тут все с объектами. Короче говоря грубый набросок. Переосмыслил вчерашний пост и переформулировал вопросы. 1. Понятно, что перерисовывается только канвас, поэтому в объекте "кубик" безсмысленно создавать метод перерисовки. 2. Кто следит за столкновениями: сама среда или в каждом объекте реализовывать метод ("сканирование" пространства перед собой, если столкновение - переключать на другие механизмы класса, которые будут обрабатывать поведение объекта соответственно столкновению? 3. Как определять, что перед объектом (как раз задача "сканера")? Со своей колокольни вижу только один способ - матрица. Тогда в метод кубика "сканер" передается информация о ячейках перед ним. Если в ячейке 1, то препятствие и остановиться. Именно это описал псевдокодом. То есть методы всех объектов работают с единой матрицей. Есть другие способы? |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 6 Всего: 52 |
А как ты собираешься "сканировать" пространство, если у твоего объекта не будт доступа к другим? Надо чтобы "среда" занималась вопросом столкновений. Вот так и делай. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
Процесс "сканирования", как я себе его представляю. В классе "кубик" реализуем функцию обработки столкновений с аргументом, в который - на каждом шаге движения - среда записывает флага: есть впереди препятствие (другой кубик) или нет. Эту информацию среда, в свою очередь, берет из глобальной матрицы. Можно обработку столкновений реализовать в одной функции (столкновение со стеной, столкновение с другим объектом, определение, достиг ли кубик крыши "стакана"), а можно разнести по функциям, тогда одна будет получать от среды флаг, анализировать и направлять соответствующей функции - сейчас не суть важно.
Только вот друг говорит, что определять столкновения по матрице - изврат. Как неизвратно - я не уточнил, однако думаю что способ только один. Потому что сегодняшняя компьютерная техника умеет оперировать только битами, "сканирование" графиеской и семантической информации - удел компьютеров будущего. Или он все таки прав и есть другой способ? |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
А что если назначить задачу сканирования не кубику а среде, т.е. чтобы среда занималась сканированием и выставляла соответствующие флаги. Тогда получиться, что не надо каждому объекту давать доступ к глобальной матрице. Как такая идея?
P.s. извиняюсь за корявый язык, если что-то не понятно - спрашивайте |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
Goganchic, я думал над этим вопросом. Сканирование может осуществляться двумя объектами: кубиком и средой. Если кубиком:
В классе "кубик" есть открытая функция с аргументом (или с аргументами: ячейка снизу, ячейка слева, ячейка справа, ячейка сверху). Программист в главной программе вызывает эту функцию объекта и передает ей значения из матрицы (пока не знаю, как этот механизм будет выглядеть). Все остальное происходит в обработчиках объекта. Если средой. Тут может быть я гоню, но в моем представлении при таком способе среда становится менеждером объектов и сама ими рулит. А если количество объектов неизвестно? То есть чтобы менеджер не распух, его придется ограничить. Да и с точки зрения объектной ориентированности так мне кажется правильнее. В игрострое я не шарю, так что может и не правильнее - не объект сам себе хозяин, а среда, в которой этот объект находится. Это сообщение отредактировал(а) Gunslinger - 23.4.2007, 16:20 |
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |