Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Начать с тетриса (классический совет ветеранов), Организационные вопросы 
:(
    Опции темы
Gunslinger
Дата 19.4.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Вот решился. Игрушка будет видоизменяться и наращивать способности по мере повышения моего экспириенса. Для начала: одноэлементные кубики, никаких вспышек, работа в канвас.
Выбрал "стакан" средой обработки столкновений кубиков с полом, стенами, друг с другом. То есть функции элементов "физической" части будут выполняться в "стакане" (main, я думаю). 
Кубики будут представлять собой объекты, инкапсулирующие графические ресурсы (свое изображение в нормальном режиме и режиме уничтожения), звуковые ресурсы (звук падения на поверхность и звук уничтожения), геометрические размеры... Может быть еще какие механизмы (пока моя игровая логика слаба и пашет со скрежетом).
Кое-какие вопросы:
1. Как организовать движение? В кубике функциями приращения координат (падения) и перерисовки или в среде (среда сама следит за движением кубиков) и через таймер? (лучше выразиться пока не могу).
2. Вопрос к первому. Как обновлять изображение? В тетрисе хорошо то, что в каждый момент времени движется только один объект. А если несколько? Все привязывать к единому таймеру или можно реализовать перерисовку каждого объекта поотдельности (тогда можно получить эффект мерцания)?

Спасибо, что прочитали этот бред ничерта не понимающего энтузиаста. Надеюсь на дельный конструктив.
PM MAIL   Вверх
Rickert
Дата 20.4.2007, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



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


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Gunslinger
Дата 20.4.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Rickert, это понимаю.
  void Приростил_координату(); (в случает тетриса - координату падения y)
  флаг=bool Просчитал_столкновение(); истина - столкновение
  if(флаг)
             {  Оставить объект; т.е. снять с объекта "фокус", чтобы игрок с ним уже не смог работать
                 Создать новый объект; пока невидимый
                 Перерисовать_канвас;
               }
     else Перерисовать_канвас;

Где-то так себе представляю. Но тут все с объектами. Короче говоря грубый набросок.
Переосмыслил вчерашний пост и переформулировал вопросы.
1. Понятно, что перерисовывается только канвас, поэтому в объекте "кубик" безсмысленно создавать метод перерисовки.
2. Кто следит за столкновениями: сама среда или в каждом объекте реализовывать метод ("сканирование" пространства перед собой, если столкновение - переключать на другие механизмы класса, которые будут обрабатывать поведение объекта соответственно столкновению?
3. Как определять, что перед объектом (как раз задача "сканера")? Со своей колокольни вижу только один способ - матрица. Тогда в метод кубика "сканер" передается информация о ячейках перед ним. Если в ячейке 1, то препятствие и остановиться. Именно это описал псевдокодом. То есть методы всех объектов работают с единой матрицей. Есть другие способы?

PM MAIL   Вверх
Rickert
Дата 21.4.2007, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Цитата(Gunslinger @  20.4.2007,  18:02 Найти цитируемый пост)
2. Кто следит за столкновениями: сама среда или в каждом объекте реализовывать метод ("сканирование" пространства перед собой, если столкновение - переключать на другие механизмы класса, которые будут обрабатывать поведение объекта соответственно столкновению?

А как ты собираешься "сканировать" пространство, если у твоего объекта не будт доступа к другим? Надо чтобы "среда" занималась вопросом столкновений.
Цитата(Gunslinger @  20.4.2007,  18:02 Найти цитируемый пост)
3. Как определять, что перед объектом (как раз задача "сканера")? Со своей колокольни вижу только один способ - матрица. Тогда в метод кубика "сканер" передается информация о ячейках перед ним. Если в ячейке 1, то препятствие и остановиться. Именно это описал псевдокодом. То есть методы всех объектов работают с единой матрицей. Есть другие способы?

Вот так и делай. smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Gunslinger
Дата 21.4.2007, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Процесс "сканирования", как я себе его представляю. В классе "кубик" реализуем функцию обработки столкновений с аргументом, в который - на каждом шаге движения - среда записывает флага: есть впереди препятствие (другой кубик) или нет. Эту информацию среда, в свою очередь, берет из глобальной матрицы. Можно обработку столкновений реализовать в одной функции (столкновение со стеной, столкновение с другим объектом, определение, достиг ли кубик крыши "стакана"), а можно разнести по функциям, тогда одна будет получать от среды флаг, анализировать и направлять соответствующей функции - сейчас не суть важно.
Только вот друг говорит, что определять столкновения по матрице - изврат. Как неизвратно - я не уточнил, однако думаю что способ только один. Потому что сегодняшняя компьютерная техника умеет оперировать только битами, "сканирование" графиеской и семантической информации - удел компьютеров будущего. Или он все таки прав и есть другой способ?
PM MAIL   Вверх
Goganchic
Дата 23.4.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



А что если назначить задачу сканирования не кубику а среде, т.е. чтобы среда занималась сканированием и выставляла соответствующие флаги. Тогда получиться, что не надо каждому объекту давать доступ к глобальной матрице. Как такая идея?
P.s. извиняюсь за корявый язык, если что-то не понятно - спрашивайте
PM Jabber   Вверх
Gunslinger
Дата 23.4.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Goganchic, я думал над этим вопросом. Сканирование может осуществляться двумя объектами: кубиком и средой. Если кубиком:
В классе "кубик" есть открытая функция с аргументом (или с аргументами: ячейка снизу, ячейка слева, ячейка справа, ячейка сверху). Программист в главной программе вызывает эту функцию объекта и передает ей значения из матрицы (пока не знаю, как этот механизм будет выглядеть). Все остальное происходит в обработчиках объекта.
Если средой.
Тут может быть я гоню, но в моем представлении при таком способе среда становится менеждером объектов и сама ими рулит. А если количество объектов неизвестно? То есть чтобы менеджер не распух, его придется ограничить.
Да и с точки зрения объектной ориентированности так мне кажется правильнее. В игрострое я не шарю, так что может и не правильнее - не объект сам себе хозяин, а среда, в которой этот объект находится.

Это сообщение отредактировал(а) Gunslinger - 23.4.2007, 16:20
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.1759 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.