![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2010
Сообщений: 18
|
Добрый день!
Столкнулся с такой проблемой. Итак, делаю игру Rogue-like RPG (разновидлность пошаговой РПГ с полем в виде клеток, где на каждой клетке дискретно размещены элементы, например, пустой пол, кусок стены, игрок, монстр, и.т.д, несколько кусков стены в ряд формирует стену, к примеру), где, в простейшем виде есть базовый класс - Entity: всё, что имеет графичесое представление, будь то стена, пол, или монстр. Мне кажется логичной такая идея(в простейшем виде): от Entity наследуется несколько классов: стена, пол, актёр. От актёра, в свою очередь наследуется класс игрока и монстра. От монстра наследуется целая иерархия их разновидностей до 9-го колена, т.к. у каждого семейства монстров могут быть свои дополнительные методы: типа кинуть камень, или убежать за угол и.т.п. Вопрос вот в чём. Я наследую базовый класс всех отображаемых предметов (так как они анимированы) от movieclip. В библиотеке во Flash CS5 я строю иерархию графических элементов: стены, пол, игрок, монстры, и.т.д с помощю системы каталогов (например, каталог Goblin имеет разновидности гоблинов(symbol): пещерный, лесной, зелёный, злой, и.т.д. ). Насколько я правильно понимаю, если в свойствах символа не указать "Export for ActionScript", то через as файлы нельзя будет отображать экземпляры символов на stage(поправьте, если я неправ). Допустим я указываю импортировать в AS. по умолчанию создаваемый класс наследуется от Movieclip. ДОпустим, я хочу работать с классом Wall. Свой базовый класс Entity я наследовал от того же Movieclip. От него я наследую, например, класс Wall. Когда я пишу в коде, который был создан после активизации галочки "export for AS", вместо "extends movieclip" "extends Entity" я получаю сообщение об ошибке. Хтя, казалось бы, при наследовании от класса, который наследуется от Movieclip, у него должны быть все те же методы и свойства, что и у movieclip. Как мне поступить, чтобы я мог воспользоваться полиморфизмом в иерархии своих классов, а именно, методом Display() для любого объекта подкласса базового класса Entity, который позволяет отобразить монстра, стену, и.т.п. на stage, не говоря об отображении их различных состояний: убитый монстр, раненый монстр, целый монстр, и.т.п? У базового класса предполагается как минимум свойства координат в игровом пространстве, которые наследуются по всей иерархии. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 31
|
Цитата:
в заголовке пакета с Wall ставили? |
|
|||||
|
Регистрация: May 2010
Сообщений: 18
|
Пробовал и так и сяк. делал так:
Создаю новый проект. в нём в корне создаю новый файл test.fla в этом файлк создаю в библиотеке символ CWall (рисую что-то, экспортирую как символ, не экспортирую) В корне проекта создаю файл Main.as : package {import flash.display.MovieClip; import Entity.Cwall; public class Main extends MovieClip { public function Main() { trace("OK!"); var JWall:CWall = new CWall(); // JWall.Dr(); // addChild(JWall); } } } в ней создаю файл CEntity.as: package Entity {public class CEntity {protected var Xx,Yy : int; public function CEntity() {Xx=100;Yy=100; } } } package Entity {import Entity; public class Cwall extends CEntity {public function Cwall() {Xx=200;Yy=200; this.x=Xx;this.y=Yy; } public function Dr() {this.x=Xx;this.y=Yy; addChild(this) } } } захожу в библиотеку, пытаюсь назначить класс для символа Cwall. При этом Adobe Flash создаёт новый файл, так как не находит описание класса, которое написано уже в Entity\Cwall.as как решить проблему? Последний раз редактировалось Alexk553; 20.05.2010 в 20:14. |
|
|||||
|
Эм, зачем создавать класс, расширенный от пустышки, если вы используете FlashIDE, а не swc-библиотеку? Просто переименуйте классы так, как названы классы-пустышки у мувиклипов. Указывать пакет в вашем случае нужно обязательно, раз во вложенных папках все лежит.
Добавлено через 5 минут Хотя, я неправильно понял ваш вопрос. Так вот, что делаем: классы-поведения мы делаем иерархически, как вы и делаете. А вот в каждом классе-поведении создавать нужно экземпляр класса-пустышки-мувиклипа и с ним работать. Логика ясна?
__________________
тут я |
|
|||||
|
Регистрация: May 2010
Сообщений: 18
|
Иными словами воспользоваться композицией? Меня тоже посещала эта мысль. То есть композиция вместо наследования. и тогда в библиотеке может быть произвольная иерархия классов..
Последний раз редактировалось Alexk553; 20.05.2010 в 20:38. |
|
|||||
|
Регистрация: May 2010
Сообщений: 18
|
Но я не знаю, как это реализовать. Когда я привязываю новый символ в библиотеке, создаётся новый файл с пустым шаблоном по типу:
Код AS3: А что делать дальше? Выходит, сколько символов в библиотеке, столько будетт этих шаблонных файлов? |
|
|||||
|
Регистрация: May 2010
Сообщений: 18
|
В общем вопрос, как это всё организовать, чтобы потом не запутаться, т.к. предполагаю наличие нескольких сотен таких вот символов в иерархии.
|
|
|||||
|
Называйте классы-пустышки понятными именами. RightWall, LeftWall и прочее. Можно использовать суффиксы или постфиксы: Monster_GreenOgr, Monster_RedOgr. Ну и раскидывать в библиотеке по папкам. Это уже чисто для удобства. Дело вкуса. А можно потом экспортировать в swc-библиотеку и использовать в другой игре.
__________________
тут я |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|