Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
1

Создание экземпляров класса

18.02.2014, 13:30. Показов 1929. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Такая проблема: делал изначально один главный класс проекта (допустим Level1), куча текста и тд. Потом пришлось класс проекта заменить на другой (Main), в конструкторе которого создаю теперь екземпляр Level1:
ActionScript 3
1
2
3
public function Main(){
            addChild(new LEVEL_1_1());
        }
И вот тут начались проблемы: екземпляры в классе Level1 не видят как я понял сцены stage и при попытке создать такой екземпляр выдает ошибки:
Assembler
1
2
3
4
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
    at SBFPSInspector()
    at LEVEL_1_1()
    at Main()
Как быть? Теперь что во всем теле класса тыкать перед еддчайлдами параметр сцены передаваемый в конструктор класса?

Добавлено через 11 минут
Хотя может я и ошибаюсь - сцену как-то непонятно воспринимает класс Level1:

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public function LEVEL_1_1(st:Stage)
        {
            init(); 
            fps=new SBFPSInspector(stage); // так выдает ошибку null, а если передам st то норм, а в след функции видит стейдж напрямую - в чем разница????
        }
        
        //--------------------ИНИЦИАЛИЗАЦИЯ МИРА--------------------------------------------------------
        private function init():void {
            addChild(bmp_back);
            addChild(bmp);
            _debug = new Sprite ();
            
            trace("видит сцену");
            Box2DHelpers.stageApp = stage;
            ....
            
 
        }
А в ините распознает сцену без проблем и еддчайлд срабатывает норм
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2014, 13:30
Ответы с готовыми решениями:

Работа с классами: создание нескольких экземпляров класса
В общем в ActionScript 3 неочень. Ситуацыя такова: Мне нужно игру на флеше написать(суть игры в...

Выборка из вектора экземпляров заданного класса
Здарова всем!!! Есть у меня допустим класс BaseObject, и есть классы object1, object2, object3...

Объявление класса, создание экземпляров класса. Наследование классов
Вообщем начал делать программу:"Создать класс Матрицы, обеспечивающего размещение матрицы...

Создание и разрушение экземпляров класса
Здравствуйте. Мне нужно разработать программу на c ++ Builder в которой на основе структур,...

10
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
18.02.2014, 13:49 2
FAQ
0
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
18.02.2014, 13:51  [ТС] 3
Вобщем проблему нашел - класс почему-то не воспринимает stage как параметр, но как присвоение значению - отлично видит.Масло-масляное. А если этот класс сделать еще и основным классом проекта, но и как параметр stage воспринимается. Может кто дать разъяснения по этому поводу?
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
18.02.2014, 13:56 4
Wells77, смотри по ссылке
0
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
18.02.2014, 14:00  [ТС] 5
Цитата Сообщение от TanaTiX Посмотреть сообщение
Если я правильно понял, то я в момент добавления екземпляра Level1 на сцену с мейна пробую уже достучатся до stage с тела Level1. То-есть все обращения к stage можна делать с любого места Level1, но не в конструкторе? Тогда почему нормально воспринимается stage с процедуры Init, которая вызывается с конструктора?

Добавлено через 1 минуту
Цитата Сообщение от TanaTiX Посмотреть сообщение
Wells77, смотри по ссылке
Посмотрел, суть понял, но не понял почему stage видит как присвоение в init, которое вызывается в конструкторе?
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
18.02.2014, 14:24 6
Цитата Сообщение от Wells77 Посмотреть сообщение
не понял почему stage видит как присвоение в init
О каком присвоении речь?
0
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
18.02.2014, 14:31  [ТС] 7
ActionScript 3
1
Box2DHelpers.stageApp = stage;
Код описан выше
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
18.02.2014, 14:56 8
Wells77, вы не внимательно читали
Цитата Сообщение от TanaTiX Посмотреть сообщение
Это свойство перестает быть null после добавления объекта на сцену
Объект на сцену добавляется после его создания, т.е. после того, как отработает его конструктор.
0
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
18.02.2014, 15:03  [ТС] 9
Цитата Сообщение от TanaTiX Посмотреть сообщение
Wells77, вы не внимательно читали

Объект на сцену добавляется после его создания, т.е. после того, как отработает его конструктор.
Тем-более, почему тогда в конструкторе присвоение переменной значения stage проходит, а указание stage как параметр нет? Фактически в конструкторе объект еще не добавлен на сцену. Функции init, где идет присвоение сцены переменной вызывается с конструктора таки .
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
18.02.2014, 15:29 10
Лучший ответ Сообщение было отмечено TanaTiX как решение

Решение

Wells77, вы можете передать в конструктор ссылку на stage, и написать что-то типа:
ActionScript 3
1
_customStage.addChild(this);
- и это будет работать (то что это кривой подход сейчас не обсуждаем), т.к. нет разницы как вы достучались до переменной ссылочного типа, передав ссылку на объект через параметры метода, через конструктор класса, через статическую переменную или как еще, но само значение/свойство stage экземпляра DisplayObject изменится только в момент добавления объекта на сцену или удаления оттуда. При этом данный объект может содержать ссылки на stage в виде других переменных.
1
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
18.02.2014, 15:48  [ТС] 11
Все дошло: в моем коде в обеих случаях stage принимал значение null. просто присвоение не материлось, ибо какая разница что присваивать null или реальное значение. А параметром материлось. ибо функции не принимали пустых значений.
0
18.02.2014, 15:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2014, 15:48
Помогаю со студенческими работами здесь

Создание экземпляров класса в цикле.
Здравствуйте, у меня возник вопрос, ответы на который не удалось подыскать в инете - везде...

Создание массива экземпляров класса
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public...

Создание массива экземпляров класса
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public...

Динамическое создание экземпляров класса
Здравствуйте! Имеется класс TUnits и родительский класс TGameObjects, необходимо, чтобы при нажатии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru