![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Mar 2011
Сообщений: 38
|
Имеется объект-контейнер (DisplayObjectContainer), созданный на Timeline.
Имеется класс в описании которого необходимо использовать обращение к этому контейнеру. Возможно ли это? Если да, то как? Заранее спасибо))) |
|
|||||
|
Из описания класса DisplayObjectContainer:
Цитата:
2) Где, по отношению к контейнеру, располагается экземпляр класса, в описании которого необходимо к нему обратиться? 3) Или вы имеете в виду Document class? 4) Это наверняка возможно. |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 38
|
Да, контейнер является дочерним к stage. Экземпляр класса, из которого требуется вызвать контейнер, тоже является дочерним к stage.
Контейнер - не экземпляр DisplayObjectContainer - он экземпляр Sprite, но но выполняет функцию контейнера. Последний раз редактировалось MAPUTO; 07.04.2011 в 11:20. |
|
|||||
|
Можно в Document class'е при создании экземпляра вашего класса передавать ему ссылку на требуемый контейнер. Например так:
// Document class package { import flash.display.MovieClip; public class Main extends MovieClip { private var subject:Subject; public function Main() { // Создаем объект. Предполагается, что на сцене // существует контейнер с именем cont. subject = new Subject(this.cont); } } } import flash.display.DisplayObjectContainer; import flash.display.Sprite; // Разумеется правильнее описывать классы в отдельных файлах. class Subject extends Sprite { private var container:DisplayObjectContainer; public function Subject(container:DisplayObjectContainer) { this.container = container; trace("Yep!"); } } |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 38
|
Код в первом кадре на Timeline:
... var BULET:Sprite = new Sprite(); addChild(BULET); ... var personag=new pers(this.BULET); personag.x=300; personag.y=240; addChild(personag); ... package { import flash.display.MovieClip; import flash.display.Sprite; import flash.display.DisplayObjectContainer; import flash.events.*; public class pers extends Sprite { private var BuletContainer:DisplayObjectContainer; public function pers(container:DisplayObjectContainer) { BuletContainer = container; } } } Если заменить DisplayObjectContainer на Sprite в описании класса - результат тотже. Последний раз редактировалось MAPUTO; 07.04.2011 в 14:19. |
|
|||||
|
Кажется, в следующей строчке не нужно писать this, вы же имеете в виду переменную BULET, а не поле в главном классе приложения.
Поскорее отучайтесь писать код в кадрах. Вообще же это можно проверить трейсом: |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 38
|
В том то и проблема, что я хочу перенести весь код в описание классов, но вот взаимодействие между объектами получается только внутри одной иерархической цепочки через parent и child
![]() без директивы this все тоже самое... Последний раз редактировалось MAPUTO; 07.04.2011 в 15:14. |
|
|||||
|
Выложу мой исходник (CS5).
|
|
|||||
|
Регистрация: Mar 2011
Сообщений: 38
|
Перенес все в класс Main
package { import flash.display.*; public class Main extends MovieClip { var BULET:Sprite = new Sprite(); var personag:pers; public function Main() { addChild(this.BULET); trace(this.BULET); var personag=new pers(this.BULET); personag.x=300; personag.y=240; addChild(personag); } } } [object Sprite] TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at pers() at Main() где ошибка? ![]() Последний раз редактировалось MAPUTO; 07.04.2011 в 15:47. |
|
|||||
|
зачем в конструкторе объявляете personag как локальную?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 08:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|