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

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

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

Регистрация: May 2010
Сообщений: 18
По умолчанию Привязать иерархию своих классов к символам из библиотеки для вывода на stage.

Добрый день!
Столкнулся с такой проблемой.
Итак, делаю игру 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, не говоря об отображении их различных состояний: убитый монстр, раненый монстр, целый монстр, и.т.п? У базового класса предполагается как минимум свойства координат в игровом пространстве, которые наследуются по всей иерархии.

Старый 20.05.2010, 12:01
bars80080 вне форума Посмотреть профиль Отправить личное сообщение для bars80080 Найти все сообщения от bars80080
  № 2  
Ответить с цитированием
bars80080

Регистрация: Jun 2009
Сообщений: 31
Цитата:
вместо "extends movieclip" "extends Entity"
а
Код AS3:
import Entity;
в заголовке пакета с Wall ставили?

Старый 20.05.2010, 20:11
Alexk553 вне форума Посмотреть профиль Отправить личное сообщение для Alexk553 Найти все сообщения от Alexk553
  № 3  
Ответить с цитированием
Alexk553

Регистрация: May 2010
Сообщений: 18
Пробовал и так и сяк. делал так:
Создаю новый проект.
в нём в корне создаю новый файл test.fla
в этом файлк создаю в библиотеке символ CWall (рисую что-то, экспортирую как символ, не экспортирую)

В корне проекта создаю файл Main.as :
Код AS3:
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);
    }
  }
}
в проекте создаю папку Entity
в ней создаю файл CEntity.as:

Код AS3:
package Entity 
{public class CEntity
  {protected var Xx,Yy : int;
   public function CEntity() 
    {Xx=100;Yy=100;
    }
  }
}
в этой же папке создаю файл CWall
Код AS3:
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)
     }
  }
}
при компиляции E:\Flash\Test\Main.as, Line 12 1046: Type was not found or was not a compile-time constant: CWall.

захожу в библиотеку, пытаюсь назначить класс для символа Cwall. При этом Adobe Flash создаёт новый файл, так как не находит описание класса, которое написано уже в Entity\Cwall.as

как решить проблему?


Последний раз редактировалось Alexk553; 20.05.2010 в 20:14.
Старый 20.05.2010, 20:21
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Эм, зачем создавать класс, расширенный от пустышки, если вы используете FlashIDE, а не swc-библиотеку? Просто переименуйте классы так, как названы классы-пустышки у мувиклипов. Указывать пакет в вашем случае нужно обязательно, раз во вложенных папках все лежит.

Добавлено через 5 минут
Хотя, я неправильно понял ваш вопрос. Так вот, что делаем: классы-поведения мы делаем иерархически, как вы и делаете. А вот в каждом классе-поведении создавать нужно экземпляр класса-пустышки-мувиклипа и с ним работать. Логика ясна?
__________________
тут я

Старый 20.05.2010, 20:31
Alexk553 вне форума Посмотреть профиль Отправить личное сообщение для Alexk553 Найти все сообщения от Alexk553
  № 5  
Ответить с цитированием
Alexk553

Регистрация: May 2010
Сообщений: 18
Иными словами воспользоваться композицией? Меня тоже посещала эта мысль. То есть композиция вместо наследования. и тогда в библиотеке может быть произвольная иерархия классов..


Последний раз редактировалось Alexk553; 20.05.2010 в 20:38.
Старый 20.05.2010, 20:33
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Конечно. Это же проще - все внимание на коде и в коде.
__________________
тут я

Старый 20.05.2010, 20:36
Alexk553 вне форума Посмотреть профиль Отправить личное сообщение для Alexk553 Найти все сообщения от Alexk553
  № 7  
Ответить с цитированием
Alexk553

Регистрация: May 2010
Сообщений: 18
Но я не знаю, как это реализовать. Когда я привязываю новый символ в библиотеке, создаётся новый файл с пустым шаблоном по типу:
Код AS3:
Код AS3:
package CEntity {
 
	import flash.display.MovieClip;
 
 
	public class CWall extends MovieClip {
 
 
		public function CWall() {
			// constructor code
		}
	}
 
}
А что делать дальше? Выходит, сколько символов в библиотеке, столько будетт этих шаблонных файлов?

Старый 20.05.2010, 20:38
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 8  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Да, столько и будет. Они нужны только для того, чтобы написать в классе-поведении что-то типа:
Код AS3:
private var clip:CWall = new CWall();
__________________
тут я

Старый 20.05.2010, 20:39
Alexk553 вне форума Посмотреть профиль Отправить личное сообщение для Alexk553 Найти все сообщения от Alexk553
  № 9  
Ответить с цитированием
Alexk553

Регистрация: May 2010
Сообщений: 18
В общем вопрос, как это всё организовать, чтобы потом не запутаться, т.к. предполагаю наличие нескольких сотен таких вот символов в иерархии.

Старый 20.05.2010, 20:43
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 10  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Называйте классы-пустышки понятными именами. RightWall, LeftWall и прочее. Можно использовать суффиксы или постфиксы: Monster_GreenOgr, Monster_RedOgr. Ну и раскидывать в библиотеке по папкам. Это уже чисто для удобства. Дело вкуса. А можно потом экспортировать в swc-библиотеку и использовать в другой игре.
__________________
тут я

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

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

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


 


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


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