Форум программистов, компьютерный форум, киберфорум
Наши страницы
ActionScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Wells77
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
1

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

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

Такая проблема: делал изначально один главный класс проекта (допустим 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)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 13:30
Ответы с готовыми решениями:

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

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

Повторное создание класса
function eventMouseClickImage(nameButton:String){ var _dayProperties = new...

Создание класса с параметрами
Подскажите пжста, как создать свой класс с параметрами в виде {}. Как например в TweenMax...

Программное создание экземпляра класса
Вобщем разрабатываю инвентарь для игры и хочу реализовать следующий механизм. -Есть класс...

10
TanaTiX
Модератор
2807 / 1664 / 169
Регистрация: 19.02.2011
Сообщений: 6,102
Завершенные тесты: 2
18.02.2014, 13:49 2
FAQ
0
Wells77
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
18.02.2014, 13:51  [ТС] 3
Вобщем проблему нашел - класс почему-то не воспринимает stage как параметр, но как присвоение значению - отлично видит.Масло-масляное. А если этот класс сделать еще и основным классом проекта, но и как параметр stage воспринимается. Может кто дать разъяснения по этому поводу?
0
TanaTiX
Модератор
2807 / 1664 / 169
Регистрация: 19.02.2011
Сообщений: 6,102
Завершенные тесты: 2
18.02.2014, 13:56 4
Wells77, смотри по ссылке
0
18.02.2014, 13:56
Wells77
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
TanaTiX
Модератор
2807 / 1664 / 169
Регистрация: 19.02.2011
Сообщений: 6,102
Завершенные тесты: 2
18.02.2014, 14:24 6
Цитата Сообщение от Wells77 Посмотреть сообщение
не понял почему stage видит как присвоение в init
О каком присвоении речь?
0
Wells77
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
18.02.2014, 14:31  [ТС] 7
ActionScript 3
1
Box2DHelpers.stageApp = stage;
Код описан выше
0
TanaTiX
Модератор
2807 / 1664 / 169
Регистрация: 19.02.2011
Сообщений: 6,102
Завершенные тесты: 2
18.02.2014, 14:56 8
Wells77, вы не внимательно читали
Цитата Сообщение от TanaTiX Посмотреть сообщение
Это свойство перестает быть null после добавления объекта на сцену
Объект на сцену добавляется после его создания, т.е. после того, как отработает его конструктор.
0
Wells77
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
18.02.2014, 15:03  [ТС] 9
Цитата Сообщение от TanaTiX Посмотреть сообщение
Wells77, вы не внимательно читали

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

Решение

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

Создание экземпляра класса игрового времени
Есть основной файл программы и есть класс. В классе описано создание виртуального "времени"....

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.