|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
|
Stalin45, а вы точно создаёте непосредственно объект класса turret, а не объект класса из библиотеки, расширяющий turret? Просто такая ошибка обычно поэтому возникает.
|
|
|||||
Регистрация: Jan 2012
Сообщений: 10
|
Parez, я добавлял именно базовый класс, описанный в файле as, но да, действительно, спасибо, проблему обнаружил (даже после удаления всех экземпляров объектов turret и связей с ними он выдавал ошибку, но! мне же нужен именно библиотечный класс (он графически оформлен).
Так как же создать библиотечный класс (CS4), принимающий аргумент?? Или, если так нельзя, как тогда графически оформить экземпляр? P.S. И отсюда ещё важный вопрос: так а разве можно будет в коде файла turret.as записать в obj ссылку на библиотечный экземпляр? Он его распознает? Последний раз редактировалось Stalin45; 13.01.2012 в 01:23. |
|
|||||
Да, все просто. Создаете мувиклип. В свойствах пишете где class: turret. А где base class ничего не пишете. По умолчанию base class должен быть мувиклип. Пишете свой класс turret, где он принимает параметры. И создаете экземпляр
Добавлено через 3 минуты
А если не подходит вам такое, то способов столько, что мама дорогая. Класс 1 public class Class1 { public var class2Obj:Class2; public function Class1(){ } public function init(obj:Class1):void { class2Obj = obj. } }
__________________
Я мало чего умею, но зато хорошо умею учиться... Последний раз редактировалось HardCoder; 13.01.2012 в 01:26. |
|
|||||
Регистрация: Jan 2012
Сообщений: 10
|
Ура! Ну, наконец-то...все заработало как надо! Спасибо, HardCoder!
Использовал второй предложенный вами вариант. Но, если у вас будет время, ответьте пожалуйста на вопрос: Если мы базовый класс turret'а сделаем обычным MC, то не могу понять, где же тогда описать сам класс turret, ведь он уже описан в пакете characters (связь с которым мы поменяли на связь с MC)? |
|
|||||
Пишем класс
public class turret extends Sprite { public var target_:robot; internal var armour, health, energy, rotationSpeed:uint; internal var energyRegen:Number; public function turret(obj:robot) { target_ = obj; armour = 500; health = 250; energy = 40; energyRegen = 0,1; rotationSpeed = 2; }
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
Регистрация: Jan 2012
Сообщений: 10
|
Вы не совсем поняли, так где именно хранится код, описанный вами (напр., base class раньше был в папке characters в файле turret, а код для графы class - ?)? В директории файла fla или где-то ещё?
|
|
|||||
Регистрация: Jan 2012
Сообщений: 22
|
Вот мой способ поиска чего бы то ни было та сцене
private function getObjectByName(n:String,par:DisplayObjectContainer):DisplayObject{ for (var i:int = 0;i<par.numChildren;i++) { if (par.getChildAt(i).name==n) {return par.getChildAt(i);} else {if (par.getChildAt(i) is DisplayObjectContainer) { var t:DisplayObject = getObjectByName(n,DisplayObjectContainer(par.getChildAt(i))); if (t!=null) {return t}}} } return null; } |
|
|||||
Ваш мувиклип turret - это всего лишь "мультик". Для того чтобы этот мультик имел свое поведение, свои свойства мы пишем для него класс. Код выше
Теперь этот класс надо подключить к вашему мультику. В свойствах этого мувиклипа(в библиотеке) в графе class надо написать имя созданного класса: "turret".
Теперь написанный вами класс turret имеет код actionscript но кроме того он имеет и графическое представление в виде вашего мувиклипа из библиотеки. Графа base class указывает на базовый класс. Базовый класс = это класс от которого унаследован ваш класс turret. Эту графу можно оставить пустую. Флеш сама установит базовый класс. Не умею более грамотно обьяснить Добавлено через 4 минуты booksmaster, можно пример, где такое может пригодится?
__________________
Я мало чего умею, но зато хорошо умею учиться... Последний раз редактировалось HardCoder; 13.01.2012 в 02:23. |
|
|||||
Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
|
Ещё есть неплохой вариант привязывать графику из библиотеки к кастом классу. Сначала экспортируете ваш мувик из библиотеки для ActionScript. А в классе делаете импорт этого класса из библиотеки.
Дальше в конструкторе вашего кастом класса (расширяющего MovieClip) создаёте экземпляр класса из библиотеки и добавляете его в список отображения. получается что-то вроде этого: import TestSymbol; public class CustomClass extends MovieClip { public function CustomClass():void { var clip:TestSymbol = new TestSymbol(); addChild(clip); } } p.s. Либо, как вариант, чтобы класс был более универсальным, можно одним из аргументов в конструкторе передавать класс из библиотеки. Последний раз редактировалось Parez; 13.01.2012 в 13:12. |
|
|||||
Parez, а в чем преимущество использования композиции, вместо банальной привязки мувиклипа напрямую к классу?
Добавлено через 1 минуту Все, понял. Преимущество в том что не обязательно наследовать класс от MovieClip или Sprite, а можно от другого класса, конструктор которого принимает обязательные параметры.
__________________
Я мало чего умею, но зато хорошо умею учиться... Последний раз редактировалось HardCoder; 13.01.2012 в 13:55. |
Часовой пояс GMT +4, время: 23:40. |
|
« Предыдущая тема | Следующая тема » |
|
|