Просмотр полной версии : Добавление объекта на сцену из стороннего класса
Wormhole
26.04.2015, 12:24
Здравствуйте! У меня есть несколько классов приложения. В одном из них я создаю объект. Как мне добавить его на сцену (как в конструкторе основного класса методом addChild)?
Стало быть, в этот класс вам надо передавать ссылку на дисплей лист, в который потом хотите добавлять что-то.
ZackMercury
26.04.2015, 13:57
Или по цепочке, к примеру, у вас есть класс Package, который содержит в себе ссылку на класс Apple.
Чтобы Apple оказался на сцене, прежде чем добавлять яблоко, нужно добавить пакет.
Схема такая
internal class Main extends Sprite
addChild(new Package());
internal class Package extends Sprite
addChild(new Apple());
internal class Apple extends Bitmap
...
рисуем яблоко или загружаем картинку с сервера
...
Wormhole
26.04.2015, 15:34
Или по цепочке, к примеру, у вас есть класс Package, который содержит в себе ссылку на класс Apple.
Чтобы Apple оказался на сцене, прежде чем добавлять яблоко, нужно добавить пакет.
Схема такая
Я проясню ситуацию. Для того, чтобы не запутаться в собственном коде, я создал отдельный класс Screens, которой управляет переключением между "сценами" (экранами, ...). Для каждой в нем есть два метода: openНазвание() и closeНазвание(). Первый создает и добавляет на сцену все необходимые объекты, второй - удаляет их. Собственно, как в методах openНазвание() осуществить добавление объекта на сцену?
ZackMercury
26.04.2015, 15:44
Сделайте в главном классе статичную переменную screens, с экземпляром Screens, и обращайтесь к нему.
Просто добавьте этот экземпляр в дисплей лист(Main::addChild(screens)) и унаследуйте Screens от Sprite.
И тогда можно будет писать в Screens addChild(screen) итд.
И писать из любого класса Main.screens.open(this);
OlmerDale
26.04.2015, 15:55
package
{
import flash.display.DisplayObjectContainer;
public class Screen
{
private var _viewPort:DisplayObjectContainer;
private var _allStages:Array = [];
public function Screen(viewPort:DisplayObjectContainer)
{
this._viewPort = viewPort;
}
public function next():void
{
// здесь берем из массива _allStages нужную сцену
// а здесь добавляем её в дисплей лист
this._viewPort.addChild(/*...*/);
}
}
}
А где-то в Main пишите
this._screen = new Screen(this);
Wormhole
26.04.2015, 16:30
Сделайте в главном классе статичную переменную screens, с экземпляром Screens, и обращайтесь к нему.
Просто добавьте этот экземпляр в дисплей лист(Main::addChild(screens)) и унаследуйте Screens от Sprite.
И тогда можно будет писать в Screens addChild(screen) итд.
И писать из любого класса Main.screens.open(this);
Так ведь addChild остается неопределенным в Screens
ZackMercury
26.04.2015, 19:57
унаследуйте Screens от Sprite.
Вы чем читаете?
Wormhole
26.04.2015, 20:30
Вы чем читаете?
Я унаследовал. Метод неопределен
ZackMercury
26.04.2015, 20:31
Может, вы забыли импортировать flash.display.Sprite?
Wormhole
26.04.2015, 20:48
Может, вы забыли импортировать flash.display.Sprite?
Нет, не забыл
Добавлено через 70 часов 15 минут
Проблема решена, я зря указал, что функция статическая. Но почему так делать нельзя?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.