Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проектирование игрового объекта (http://www.flasher.ru/forum/showthread.php?t=124153)

Cybo 22.04.2009 12:53

Проектирование игрового объекта
 
Создание игрового объекта (например, главный герой, пуля и т.п. Ну для понимания назовём базовый класс MyUnit) можно сделать двумя способами:

1) Унаследоваться от Sprite или MovieClip (например, MyUnit extends Sprite). Тогда экземпляр получившегося класса унаследует такие методы как alpha, x, y, событие ENTER_FRAME и т.д. В итоге получаем объект с расширенными свойствами и методами, который рисуем через addChild, удаляем через removeChild, можем слушать его ENTER_FRAME или CLICK, вообщем наследует всё от DisplayObject.

2) Сделать обёртку для графического представления объекта. Тогда, получаем объект, который может использовать всё то, что присуще классу Sprite или MovieClip плюс рассылка своих событий. Но есть одно "но" - нужно в классе обёртке либо прописать методы-аналоги addChild (например, draw()) и все подобные, или просто иметь прямую ссылку на графический символ для осуществления манипуляций над ним.

Описание конечно получилось сумбурным... Для тех, кто понятно и имеет опыт, поделитесь, какой метод удобнее, или может моё представление неверно?

etc 22.04.2009 12:56

Разделяйте данные и вьюверы.

Cybo 22.04.2009 13:11

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

alatar 22.04.2009 20:14

1. Не вижу принципиальной разницы, между двумя этими способами. Что мешает отправлять события в первом случае?
2. Если речь идет о флеше, тогда что мешает сделать linkage на свой класс который наследуется от Sprite или MovieClip? И уже в нем прописать все поведение объекта. И просто добавлять этот объект посредством addChild и удалять с помощью removeChild

etc 22.04.2009 20:23

Cybo, модель изменяет состояние = изменяет состояние вьювер.

Smrad 23.04.2009 10:20

Цитата:

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

Хороший вариант - паттерн State.

Psycho Tiger 23.04.2009 12:21

Ну-ка ну-ка, весьма интересно.
Можно простенький пример вьювера и модели? Как я понимаю создается модель, которая делает просчеты и в нужные моменты изменяет свойства вьювера, так?

etc 23.04.2009 12:25

Модель ничего не делает с вьювером. Это сам вьювер слушает события модели и при необходимости делает какие-то телодвижения.

Писать пример влом, это обыкновенный MVC :)

Cybo 23.04.2009 21:48

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

Psycho Tiger 23.04.2009 23:47

То есть вьювер получает ссылку/создает в себе модель, подписывается на его события и изменяет состояние?
Хм. а если надо изменять позицию каждый кадр - посылаем событие 31 раз в секунду? Не накладно по производительности?


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

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