|
|
|||||
addChild в подключаемых классах
в главном классе пишу
в подключаемом internal static function add(_x:Number,_y:Number):void{ trace('Добавление монстра') var my_zombie:zombie1 = new zombie1; //(из библиотеки) my_zombie.x=_x; my_zombie.y=_y; addChild(my_zombie) // - ПРОБЛЕМА } Не добавляет на сцену ((( Помогите)
__________________
------------------------------- FLASH FLASH FLASH FLASH FLASH |
|
|||||
Регистрация: Nov 2007
Сообщений: 1,723
|
может что-то не доимпортирали ?
|
|
|||||
zombie.add(10,10);
----------------------------- package golod{ import golod.*; import flash.display.*; internal class zombie{ internal static function trac():void{ trace('ok') } internal static function add(_x:Number,_y:Number):void{ trace('Добавление монстра') var my_zombie:zombie1 = new zombie1; my_zombie.x=_x; my_zombie.y=_y; addChild(my_zombie) } } }
__________________
------------------------------- FLASH FLASH FLASH FLASH FLASH |
|
|||||
Все ровно не работает addChild ((
класс main package golod{ import flash.display.Sprite; import flash.display.MovieClip; import golod.Zombie; public class main extends Sprite{ public function main(){ Zombie.add(10,10); } } } класс Zombie package golod{ import golod.*; import flash.display.*; internal class Zombie extends Sprite{ internal static function trac():void{ trace('ok') } internal static function add(_x:Number,_y:Number):void{ trace('Добавление монстра') var my_zombie:zombie1 = new zombie1; my_zombie.x=_x; my_zombie.y=_y; addChild(my_zombie) } } }
__________________
------------------------------- FLASH FLASH FLASH FLASH FLASH |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Дело не в этом. static - указывает на статичный блок памяти, т.е. он один для всего класса (не экземпляров, а именно класса).
Конечно, у класса нет контейнера - и addChild`а просто напросто не существует в этом скоупе, если Вы, конечно, не определили его, например вот так: Пример написанный выше - это лишь пример, так делать не нужно и неправильно. Во всяком случае в 99% случаев, те кто так сделают будут четко знать, зачем им это. Добавлено через 1 минуту Чтобы было более понятно: var spr:Sprite=new Sprite(); //создали экземпляр класса spr.addChild(new Shape()); //добавили новый экземпляр класса шейп в дисплей лист spr. addChild НЕ static функция, поэтому всё ок. Чтобы вызвать addChild нам нужен был экземпляр класса, который создали выше. Math.cos(Math.PI/4); //А вот тут мы экземпляров класса не создавали, потому что метод cos и поле PI - статичные.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Тю, блин, я всегда чисто случайно обходил такую штуку.
Так вот, думаю, вам можно создать отдельный класс и потом экземпляр этого класса, в котором прописать методы добавления объектов и прочее по смыслу. Или в главном классе тоже можно, только не эстетично превращать главный класс в солянку. Только что-то мне не нравится такая композиция.
__________________
тут я Последний раз редактировалось КорДум; 10.06.2010 в 20:27. |
|
|||||
а как тогда создать нестатичный класс? у меня ругается..
__________________
------------------------------- FLASH FLASH FLASH FLASH FLASH |
|
|||||
Регистрация: Aug 2011
Сообщений: 3
|
package { import flash.display.MovieClip; public class Plane extends MovieClip{ //Графическое отображение ячейки private var plane_skin :plane_mc; //private var posX :uint = 200; //private var posY :uint = 200; public var _callsign :String = 'callsign'; //public var index :uint=0; public function Plane() { // constructor code trace('Класс plane создан') } public function createMC():void{ trace('Функция createMC вызвана'); var plane_skin= new plane_mc(); addChild(plane_skin); plane_skin.x=200; plane_skin.y=200; } public function get callsign():String { return _callsign; } public function set callsign(str:String):void { _callsign=str; } } } package { import flash.display.MovieClip; public class Main extends MovieClip { //private var plane_skin :plane_mc; private var do_status:String; //--------------------------------- public function Main() { // constructor code playGame('init'); } private function playGame(game_status){ switch (game_status) { case 'init': initVars(); initGraph(); break; case 'game': break; default: break; } } private function initVars():void{ var plane:Plane = new Plane(); plane.createMC(); //trace(plane.callsign); //var plane_skin= new plane_mc(); trace(plane.callsign); plane.callsign='One'; trace(plane.callsign); } private function initGraph():void{ } } } UPD. В общем. добился вот так 1. Импортируем во внешний класс 2. Объявляем во внешнем классе 3. Пишем во внешнем классе функцию, передающую ссылку на stage основного класса public function getStageRef(stageRef:Stage) { // Ссылку на stage нужно передавать как параметр конструктора sstage = stageRef; } 5. Все, у нас есть ссылка на stage Последний раз редактировалось Hudson; 25.11.2011 в 18:22. Причина: Найден ответ |
Часовой пояс GMT +4, время: 18:38. |
|
« Предыдущая тема | Следующая тема » |
|
|