|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.03.2010, 14:02 | #1 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Создание эффектов, действующих на различных существ
Доброго времени суток!
Возникла у меня недавно проблема с созданием различных эффектов, действующих на различных существ. Откуда, собственно, уши растут: в моей игре персонаж может подбирать различные бонусы (на данный момент - три типа), соответственно после поднятия каждого из них на кого-то начинает действовать какой-то эффект (а именно: замедление на врагов, ускорение и неуязвимость - на персонажа). В принципе до определенного момента, когда еще было только два бонуса (ускорение и замедление) и они визуально никак не проявлялись, все было достаточно просто: имеется массив размером, равным числу видов бонусов, его значения соответствовали оставшемуся времени действия каждого вида бонусов. Если элемент массива равен нулю - значит бонус не действует; каждую итерацию игрового цикла все ненулевые значения уменьшались на единичку, при подборе бонуса длительность соответствующего эффекта становилась равной начальному значению. Потом в соответствующих местах проверялись значения элементов массива эффектов. Если элемент, отвечающий за ускорение, не равен нулю - скорость персонажа на этот ход удваивалась, аналогично враги замедлялись, если при столкновении игрока с врагом бонус неуязвимости активен - ничего не происходит, иначе - упс! Вообще этот метод, на мой взгляд, неэлегантен. А уж когда мне потребовалось сделать визуализацию эффектов... Еще один сложный момент: все эти три эффекта - эффекты длительные, а ведь могут быть еще и эффекты единовременные, например, дополнительная жизнь. Через подобную схему их и вовсе непонятно как реализовать. Итак, в свете всего вышесказанного я ищу решение, предполагаю о нем следующее:
Вот пишу и думаю: а не сделать ли каждому объекту по такому же массиву, что был раньше один на всех?... Разве что с единовременными эффектами проблем это не решит. В своей игре я пока что решил проблему с помощью костылей, добавив врагам по номеру кадра анимации для эффекта замедления, а персонажу - два номера кадра - для эффекта ускорения и неуязвимости. Но это, конечно, далеко не идеал. Были у меня даже мысли по поводу скриптов, но пока что хотелось бы обойтись без них. Вот как бы можно было бы в идеале решить такую проблему?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
07.03.2010, 14:30 | #2 |
Я еще только учусь
Форумчанин
Регистрация: 24.10.2009
Сообщений: 125
|
Для каждого объекта в игре есть массив. Каждый эффект должен быть пронумерован, например замедление 1 столбец, ускорение 2 и.т.д. При поднятии определенного бонуса, ставим маркер в массиве, что бонус взят и делаем операции, что делает этот бонус.
В основном таймере циклом по всем эффектам проверяем действует ли этот бонус, если действует, то рисуем кадр, прибавляем счетчик анимации, прибавляем счетчик продолжения эффекта. Если счетчик продолжения больше времени действия, то его обнуляем, ставим маркер - не взят, снимаем эффекты. При повторном взятии, если бонус такой взят, то просто либо обнуляем счетчик, либо вычитаем из счетчика время действия эффекта(если нужно продлить эффект). |
07.03.2010, 16:04 | #3 | |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Цитата:
пыщь
|
|
07.03.2010, 16:49 | #4 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Нужно создать тип эффекта TGEffect в записях: статус, тип, время, текущий кадр, область действия, что там еще понадобится... В каждом типе объекта TGObj числится массив типа TGEffect. Массив может быть как ограниченным, так и динамическим (это сложнее). Применим первый случай, 10-15 ячеек хватит.
Движок должен быть оснащен процедурой заполнения массива. Статус отвечает за состояние эффекта, есть или нет, чтобы оперативно искать не нужные записи и вставлять новые эффекты. Тип отвечает за анимацию и параметры действия в банке эффектов. Время - сколько длится эффект, по этому значению определяется конец эффекта. Текущий кадр - понятно что такое. Область действия - область на карте, где действует эффект, ...если эффект точечный, то вместо области записываются индексы цели (объектов игры). Главный параметр - тип, условия движка ориентируются на него при обработке и выполнении эффектов.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 07.03.2010 в 16:52. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Отображение в различных браузерах | Xeon332 | HTML и CSS | 7 | 22.02.2009 09:09 |
ТРЕБУЕТСЯ агрессивная раскрутка действующих интернет-магазинов. | 50tonn | Фриланс | 2 | 04.02.2009 22:31 |
Авторизация на различных сайтах | delphin100 | Работа с сетью в Delphi | 4 | 20.01.2009 23:13 |
подсчет различных значений | zetrix | Microsoft Office Excel | 0 | 31.10.2006 07:28 |