Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.06.2012, 11:54
kukareku вне форума Посмотреть профиль Отправить личное сообщение для kukareku Найти все сообщения от kukareku
  № 1  
Ответить с цитированием
kukareku

Регистрация: May 2012
Сообщений: 18
По умолчанию Насколько умным (активным) должен быть объект в игре?

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

Вариант1: все управление героем идет из объекта "игра". Игра отслеживает, когда героя укусит враг, смотрит его свойство "защищен, и если он не "защищен", вызывает его методы "изменить состояние" и "изменить анимацию", чтобы он корчился, сама отслеживает когда анимация корчения завершается, и опять же вызывает его методы "изменить состояние" и "изменить анимацию" чтобы он шел. Игра же отслеживает, когда он находит "волшебство", изменяет его свойство на "защищен", отслеживает, когда "волшебство" заканчивается, и изменяет свойство героя "защищен" на фолс. Считает, сколько раз он укушен, и если три раза, то опять меняет его свойства и анимацию на "умер".

Вариант2: герой подписан на события "укус врагом", "найдено волшебство", "волшебство закончено" и сам себя изменяет соответственно. А также диспачит события типа "начал корчиться", "закончил корчиться" (авось еще кому пригодится). Сам считает, сколько раз он укушен, и если три раза, то меняет себя на "умер" и диспачит соответствующее событие.

Вариант3. Некий промежуточный. Часть делает герой, часть - игра.

Что будет предпочтительнее с точки зрения: 1) общепринятых правил 1) дальнейшей простоты управления игрой 2) эффективного использования ресурсов? - при условии, что свойств и методов и возможных действий на самом деле намного больше.

Ну, или, скажем так: как предпочитаете делать Вы, и почему?

(Ну, аналогично вопрос можно распространить на все другие объекты игры)

И если есть ссылки на почитать про это, тоже буду рада.


Последний раз редактировалось kukareku; 09.06.2012 в 11:57.
Старый 09.06.2012, 12:29
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
У вас здесь точно не один объект и не один класс.

Модель - состояние "героя". Это те свойства вроде "защищен", "состояние" (идет в точку..., корчится, умер). Методы - только изменить соответствующие свойства. Возможно, выступает и в качестве прокси событий анимации для всего другого мира.

UI героя. Отдельный класс. Слушает модель героя. Изменяет анимацию. При необходимости через модель героя уведомляет о событиях анимации. Взаимодействует только с моделью героя!

Управлением занимается "игра". Она соответствующим образом меняет модель (не UI!). Возможно, прослушивает уведомления от UI через ту же модель. При этом в игре может быть выделен и HeroController, который занимается обслуживанием модели. Важно при этом то, что HeroController является не частью героя, а частью игры, получившейся в процессе ее (игры) декомпозиции. Контроллер героя взаимодействует с игрой (остальной частью, другими контроллерами) и моделью игрока. Обычно к "моделям" других объектов контроллер героя не обращается (иначе сложно найти, кто и что меняет).

Отдельно хочется отметить, что все вышеописанное не обязано быть одним классом. Каждый элемент может быть несколькими классами. Может вообще не иметь специальных классов (UI может собираться вызовом нескольких общих библиотечных методов, герой может быть просто набором отдельных "простых" полей, которые передаются по-отдельности).

Основной плюс модели - логика игры и логика отображения никак не смешиваются. Да, они зависят друг от друга, но не объединены. Поэтому изменения любой из двух частей проводить проще, чем в "смешанном" варианте. При этом "поведение" тоже разделено на части. Что-то является "общим", необходимым для анимации. А что-то является общей частью логики игры и обрабатывается именно в этой логике. Может, потом при укусе врага игрок будет "защищен", а не "корчится". В этом случае будет изменена игра или контроллер (их менять и так придется), все остальное будет работать автоматически и дальше. Ну а с учетом того, что код контроллера занимается только управлением состоянием, сделать ошибку в нем сложнее.

Старый 09.06.2012, 12:29
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 3  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
У Антона Карлова есть неплохая статья, правда про искусственный интеллект, но, возможно, что-то для себя найдете =)
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь.

Старый 09.06.2012, 12:31
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 4  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Вариант 1 - вынос мозгов даже на маленьком прожекте.
Вариант 3 - не самая лучшая идея, лучше пусть мухи будут отдельно и котлеты отдельно

Поищите в гугле или здесь на форуме темы:
- MVC = Model-View-Controller = Модель-Вид-Контроллер
- FSM = Finite State Machine = Конечные Автоматы

Еще почитайте этих ребят:
- coolisee.com
- xitri.com
- ant-karlov.ru

Старый 09.06.2012, 13:21
kukareku вне форума Посмотреть профиль Отправить личное сообщение для kukareku Найти все сообщения от kukareku
  № 5  
Ответить с цитированием
kukareku

Регистрация: May 2012
Сообщений: 18
Большое спасибо всем ответившим на этот момент.

"Этих ребят" читала, из прочитанного ясный вывод для себя в этом плане сделать не смогла. Антон Карлов, как мне показалось, вообще событиями не пользуется принципиально (ну, или я что-то пропустила)

Чистый, весь такой правильный из себя MVC городить че-то не хочется, мало времени.

maxkar, а это - теоретически, или Вы именно так игры делаете?
Хотелось бы из опыта.

Старый 09.06.2012, 13:31
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 6  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Если не будете достаточно отделять модель от представления, времени потратите куда больше и нервов.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 09.06.2012, 13:49
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 7  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
maxkar, а это - теоретически, или Вы именно так игры делаете?
Хотелось бы из опыта.
Это из опыта. Причем герой, например, обычно таки пилится на части. Одна часть - характеристики (уровень, урон, состояние). Вторая часть - положение в сцене. Отдельный контроллер для работы с характеристиками (как они в зависимости от чего изменяются). Отдельный контроллер героя для перемещения в сцене и взаимодействия с объектами сцены (координация анимаций). Отдельный "общий" контроллер для всех движущихся объектов в сцене (с ним контроллеры анимаций взаимодействуют). Ну и "общая" логика, когда кого куда добавить, куда удалить, что куда переключить, когда сменить уровень.

Еще раз повторю, что не обязательно делать "канонический" MVC с его большими объектами и уведомлениями об изменении свойства. Обычно удобнее работать с мелкой гранулярностью изменений:
Код AS3:
public interface Property {
  public function getValue() : *;
  public function addChangeListener(listener : Function) : void;
  public function removeChangeListener(listener : Function) : void;
}
 
public class HeroStats {
  public var hitpoints : Property /* int */;
  public var mana : Property /* int */;
  public var score : Property /* int */;
  public var level : Property /* int */;
}
 
// где-то в инициализации:
var mainHeroStats : HeroStats;
mainHeroStat.hitpoints = new PropertyVariable();
mainHeroStat.mana = new PropertyVariable();
mainHeroStat.score = new PropertyVariable();
mainHeroStat.level = Properties.lift(calculateLevel, score);
Properties.onPropertyChange(notifyLevelChanged, mainHeroStat.level);
Properties - это немного черной магии по работе с подобными гранулярными свойствами. Позволяет не писать новых классов с ручной подпиской, обновлением и т.п. В примере level всегда будет равен значению функции calculateLevel(score.getValue()) и будет автоматически изменять уведомления. notifyLevelChanged будет вызываться при изменении mainHeroStat.level и т.п. В некоторых местах могут быть "полновесные" объекты модели для подписок. Например, такие полновесные объекты обычно используются для управления анимациями и групповыми взаимодействиями.

Ну и бонусами вроде независимого изменеия я уже несколько раз пользовался. Это позволяет независимо переделывать различные аспекты. Например, взаимодействие объектов в видимой части сцены не зависит от начисления очков, переноса уровней и т.п.

Старый 09.06.2012, 14:05
kukareku вне форума Посмотреть профиль Отправить личное сообщение для kukareku Найти все сообщения от kukareku
  № 8  
Ответить с цитированием
kukareku

Регистрация: May 2012
Сообщений: 18
ChuwY, ну так это вот и вопрос, что считать "достаточным"

maxkar, спасибо, буду думать!

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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