Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема с обращением к инстанции класса (http://www.flasher.ru/forum/showthread.php?t=113672)

AL.exe 05.07.2008 01:59

Проблема с обращением к инстанции класса
 
Ум немного за разум уже заходит...

Вот такой код:
Код:

trace(searchItemAnim.searchItemList.getChildAt(0))
//выводит "[object SearchItem]"

trace(searchItemAnim.searchItemList.getChildAt(0).name)
//выводит "instance1"


trace(searchItemAnim.searchItemList.instance1)
//выводит "undefined"

Собственно, не пойму, почему третья строка возвращает undefined и как мне тогда обратиться к instance1...

Подскажите, пожалуйста, может я чего-то не понимаю...

BlooDHounD 05.07.2008 02:05

а что он должен вернуть? шлем экстросенсорики забыл в другом городе.

AL.exe 05.07.2008 02:12

Цитата:

а что он должен вернуть? шлем экстросенсорики забыл в другом городе.
Полагаю, ссылку на объект.

Ведь если я ручками (не кодом) сделаю мувиклип smth в мувиклипе anything и помещу на сцену, то смогу обращаться к первому по ссылке anything.smth

Иначе зачем еще нужны instance name...

~ ~ ~

Все-таки получил доступ через

Код:

searchItemAnim.searchItemList.getChildByName("instance1")
Но не понял, почему я не могу обращаться напрямую...

Как можно узнать полную сылку на объект? К примеру, в as2 достаточно было просто сделать trace(имя_объекта). Как теперь это возможно?

AL.exe 05.07.2008 02:36

Что-то я понял, что адски протупил... все решил. Прошу прощения за еще одну тему, загромождающую форум...

etc 05.07.2008 11:10

В AS1/AS2 для обращения к мувику создавалась ссылка на него, с тем же именем. В AS3 этого нет, хотя Flash CS3 создает эти ссылки сам, при компиляции. Пользоваться ими я не советую.

ramshteks 05.07.2008 11:31

Цитата:

Сообщение от __etc (Сообщение 750195)
В AS1/AS2 для обращения к мувику создавалась ссылка на него, с тем же именем. В AS3 этого нет, хотя Flash CS3 создает эти ссылки сам, при компиляции. Пользоваться ими я не советую.


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

Как мне получить лучше ссылку на стейдж? что то я не до конца понимаю пока что механизм... единственный вариант который я нашел это передавать стейдж из документКласса в остальные... есть ли все таки лучше варианты?

чтобы я мог из класса который там через десять коленей от главного прикрепить тот же лазер к сцене?

записью типа
Код:

parent.addChild(laser)

etc 05.07.2008 11:35

Цитата:

Сообщение от ramshteks (Сообщение 750197)
Вот меня тоже это интересует... предположим, у меня есть главный класс он создает экземпляр другого класса, скажем я создаю класс отвечающий за кораблик космический... и мне надо чтоб на нажатие кнопки мыши создавались лучи лазера.

Как мне получить лучше ссылку на стейдж? что то я не до конца понимаю пока что механизм... единственный вариант который я нашел это передавать стейдж из документКласса в остальные... есть ли все таки лучше варианты?

чтобы я мог из класса который там через десять коленей от главного прикрепить тот же лазер к сцене?

записью типа
Код:

parent.addChild(laser)

Что мешает подписаться на событие ADDED_TO_STAGE и работать с stage?

ramshteks 05.07.2008 11:52

Цитата:

Что мешает подписаться на событие ADDED_TO_STAGE и работать с stage?
тоесть в любом классе любой вложенности?

вроде такого?

Код:

addEventListener(Event.ADDED_TO_STAGE, onAddedToStageEvent)

private function onAddedToStageEvent(evt:Event){
        evt.stage.addChild(smth);
//поправьте если не прав? может нужно использовать target?       
}


etc 05.07.2008 12:00

Я не очень понял, что вы хотите сделать.

Сайлас 05.07.2008 12:15

Если уж совсем нужно обязательно обращаться к стейдж, в Document Class'e создайте синглтон и обращайтесь через него...
Только надо ли так делать? Может создать какой-нибудь беттлфилд, на котором будут находиться лучи и корабли...

ramshteks 05.07.2008 12:18

суть вот в чем... есть мувик, класс к нему, мувик- в нем косм.кораблик скажем.
еще есть мувик в нем нарисован лазерный луч, класс к нему, описывающий его движение, при этом в конструктор надо бы передать начальные координаты и угол, эти данные брать надо из класса отвечающего за косм.кораблик.

логично появление лазера на нажатие мыши.
ну следовательно и событие сответствующее. чтоб получить доступ к стейджу простым способом можно просто поместить обработчик событий в главный класс и передавать параметры обьекта кораблика, но еще более логично чтобы сам кораблик создавал эти лучи, но если он будет делать просто addChild(laser) то лазеры будут двигаться вместе с корабликом. по сему хорошо бы было чтобы кораблик отвечал за добавление лазеров, но не в себя так сказать а на главную сцену, если можно так выразится. тут то и возникает проблема обращения к стейджу, null-object говорит мне компилятор, я нашел выход, но мне кажется это не лучший вариант: передавать в конструктор класса, отвечающего за кораблик, ссылку на стейдж.
вот...

Цитата:

Сообщение от Сайлас (Сообщение 750205)
Если уж совсем нужно обязательно обращаться к стейдж, в Document Class'e создайте синглтон и обращайтесь через него...
Только надо ли так делать? Может создать какой-нибудь беттлфилд, на котором будут находиться лучи и корабли...

можно и так, согласен, вопрос просто какк лучше получить к нему доступ, чтоб туд добавлять что тои управлять всем этим хозяйством

просто вопрос в том что как лучш всего обращаться к другим обьектам...

AL.exe 06.07.2008 02:32

Вот мы и вернулись к вопросу вот этой темы: http://www.flasher.ru/forum/showthread.php?t=113576

__etc, спасибо - я как раз понял тогда, что загвоздка именно в путях. Путь к самому MovieClip'у может отличаться от его вложенности в другой как графического представления (что-то я загнул..)

ramshteks 06.07.2008 02:46

суть моего вопроса скорее не как а какой наилучший подход!
жду ответа от _etc...

Tfp 06.07.2008 03:05

я сделал так док. класе g.stag=this//.stage
a всякие обьекты на стейже создаються глоб функцией icreate(x,y,someclass)
в которой
Код:

package {
        import flash.display.*;
        public var icreate:Function = function(_x,_y,trg:Class,layer:uint=1):DisplayObject{
                        var _obj:DisplayObject=global.Master.addChildAt(new trg,layer)
                        _obj.x=_x
                        _obj.y=_y
                        return _obj;
        }
}


AL.exe 06.07.2008 03:11

Можно, кстати, просто сделать глобальную функцию, которая будет возвращать ссылку на stage!

Как, кстати, в as3 описываются глобальные функции?

Tfp 06.07.2008 03:47

AL.exe зачем для етого целую фкцию ? достаточно переменной )
а описываеться смотри мой предыдущий пост)

AL.exe 06.07.2008 03:59

Честно говоря, не совсем понял. В мануале говорится, что для объявления глобальной переменной достаточно объявить ее вне функции и класса, но что-то, по-моему, это не работает... или я уже совсем сонный..

etc 06.07.2008 12:45

Цитата:

Сообщение от ramshteks (Сообщение 750206)
суть вот в чем... есть мувик, класс к нему, мувик- в нем косм.кораблик скажем.
еще есть мувик в нем нарисован лазерный луч, класс к нему, описывающий его движение, при этом в конструктор надо бы передать начальные координаты и угол, эти данные брать надо из класса отвечающего за косм.кораблик.

логично появление лазера на нажатие мыши.
ну следовательно и событие сответствующее. чтоб получить доступ к стейджу простым способом можно просто поместить обработчик событий в главный класс и передавать параметры обьекта кораблика, но еще более логично чтобы сам кораблик создавал эти лучи, но если он будет делать просто addChild(laser) то лазеры будут двигаться вместе с корабликом. по сему хорошо бы было чтобы кораблик отвечал за добавление лазеров, но не в себя так сказать а на главную сцену, если можно так выразится. тут то и возникает проблема обращения к стейджу, null-object говорит мне компилятор, я нашел выход, но мне кажется это не лучший вариант: передавать в конструктор класса, отвечающего за кораблик, ссылку на стейдж.
вот...



можно и так, согласен, вопрос просто какк лучше получить к нему доступ, чтоб туд добавлять что тои управлять всем этим хозяйством

просто вопрос в том что как лучш всего обращаться к другим обьектам...

Кораблем должен управлять класс-контроллер, имеющий ссылку на stage или ещё куда-либо. Он же и будет создавать лучи.

ramshteks 06.07.2008 13:37

Цитата:

Кораблем должен управлять класс-контроллер, имеющий ссылку на stage или ещё куда-либо. Он же и будет создавать лучи.
я думаю этот короткий путь... н мой вопрос так и не ответили... ((

да и плюс я пользуюсь твоим шаблоном на котором ты осуществляешь нормальную работу прелоадера, и контролирующий класс, не является классом документа... так то...

iNils 06.07.2008 13:44

ramshteks, надо использовать кнопку http://www.flasher.ru/forum/images/r...ttons/edit.gif, а не создавать несколько сообщений подряд.

ramshteks 06.07.2008 13:53

извиняюсь... понял свою ошибку

etc 06.07.2008 20:00

Цитата:

Сообщение от ramshteks (Сообщение 750377)
я думаю этот короткий путь... н мой вопрос так и не ответили... ((

да и плюс я пользуюсь твоим шаблоном на котором ты осуществляешь нормальную работу прелоадера, и контролирующий класс, не является классом документа... так то...

Я не понял, зачем для конкретного размещения выстрела лазера нужен stage? Корабль на stage? На stage, ссылка у него есть. Сами лазеры сами себя не должны никуда класть.

ramshteks 06.07.2008 20:20

поймите __etc проблема которую я описал является абстрактной.
я не пишу сейчас ничего подобного.
меня интересует вопрос каким образом получать доступ к стейджу наилучшим способом!?

я решу эту проблему легко: в конструктор кину сссылку на стейдж и буду счастлив, вопрос в томм что мне кажется этот способ не лучшим, и скажем так плохим тоном.

если тебя не затруднит _etc, не мог бы ты дать мне пару исхдников твоих, того что ты уже продал, ради изучения...
хочу уувидеть как решают эту проблему те кто давно занимается третьим скриптом

etc 06.07.2008 20:27

А нет никакой проблемы, собственно. Есть соответствующее событие, вот и все.

з.Ы. Я не продаю скрипты.

ramshteks 06.07.2008 20:34

Вложений: 1
если это не проблема, тогда не мог бы ты чуток подправить этот код чтоб не было ошибки.

или если можно дай ссылку где почитать про эту ошибку. на русском языке

etc 06.07.2008 21:03

Цитата:

Сообщение от ramshteks (Сообщение 750434)
если это не проблема, тогда не мог бы ты чуток подправить этот код чтоб не было ошибки.

или если можно дай ссылку где почитать про эту ошибку. на русском языке

Собственно, никаких ошибок я и не увидел. Вообще ничего не происходит.

ramshteks 06.07.2008 21:18

Вложений: 1
прошу прощения... забыл вложить самое главное... DocumentClass

Штрек 07.07.2008 06:48

В TStar.as закомментируй
//trace(stage.stageWidth)

ramshteks 07.07.2008 10:07

Цитата:

В TStar.as закомментируй
//trace(stage.stageWidth)
да вы гений просто... я прям не в курсе что из за этой строчики проблема...
мне нужно получить в тстаре ширину стейджа!

ulik 07.07.2008 11:45

Думаю, вам подойдет:
Код:

trace(searchItemAnim.searchItemList.getChildByName("instance1"));

AL.exe 07.07.2008 12:43

Цитата:

Сообщение от ulik (Сообщение 750519)
Думаю, вам подойдет:
Код:

trace(searchItemAnim.searchItemList.getChildByName("instance1"));

Спасибо, я уже решил проблему на первой странице таким образом :)

Greenish 07.07.2008 16:56

Вложений: 1
я думаю __etc имел ввиду это (см аттач)
Вложение 19920

etc 07.07.2008 19:15

Цитата:

Сообщение от Greenish (Сообщение 750614)
я думаю __etc имел ввиду это (см аттач)
Вложение 19920

Нет, событие должно быть не ADDED, а ADDED_TO_STAGE.

Greenish 07.07.2008 19:20

а ну да:) простите

Штрек 08.07.2008 02:04

Цитата:

Сообщение от ramshteks (Сообщение 750509)
да вы гений просто... я прям не в курсе что из за этой строчики проблема...
мне нужно получить в тстаре ширину стейджа!

Насчёт гения, так я скромно промолчу...
Каков вопрос - такой ответ -
что поправить, чтоб работало... -
комментируй то что до добавления на сцену не имеет ссылки на stage...
ИЛИ
прежде чем писать игры почитать напр. здесь п.84...
По мне так проще стат. свойства ничего и не надо...

ramshteks 08.07.2008 02:53

к сожалению ничего нового я не узнал...((
либо толкать в конструктор ссылку на стейдж, либо через событие ADDED_TO_STAGE... как ранее говорил __етк..

Цитата:

Насчёт гения, так я скромно промолчу...
я так ответил вам только потому что нужно было прочитать то что было ранее...
))
я не просил выделить мне строчку на которой прога рушиться, а обойти проблеиу наилучшим способом да и еще так чтоб работало)
Я занимаюсь программированием несколько лет и уж уверяю вас, дигностировать проги я умею)

Tfp 08.07.2008 05:00

Цитата:

либо толкать в конструктор ссылку на стейдж, либо через событие ADDED_TO_STAGE... как ранее говорил __етк..
либо через статическую переменную TMain или глобальную переменную ссілающиеся на stage

Greenish 08.07.2008 09:51

я не понимаю ADDED_TO_STAGE чем не устраивает? события - это мощное средство as3... че бы ими не пользоваться..


Часовой пояс GMT +4, время: 18:32.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.