PDA

Просмотр полной версии : Добавление объекта на сцену из стороннего класса


Wormhole
26.04.2015, 12:24
Здравствуйте! У меня есть несколько классов приложения. В одном из них я создаю объект. Как мне добавить его на сцену (как в конструкторе основного класса методом addChild)?

Tails
26.04.2015, 13:38
Стало быть, в этот класс вам надо передавать ссылку на дисплей лист, в который потом хотите добавлять что-то.

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 минут
Проблема решена, я зря указал, что функция статическая. Но почему так делать нельзя?