Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Несуществующее свойство класс подгружаемого swf (http://www.flasher.ru/forum/showthread.php?t=210205)

Godwarlock 07.02.2015 21:41

Несуществующее свойство класс подгружаемого swf
 
Код AS3:

public var money_load:Class = ApplicationDomain.currentDomain.getDefinition("sprite_money") as Class;
                public var money:Sprite;
 
                        money = new money_load();
                        money.x = 115, 1;
                        money.y = 28, 75;
                        addChild(money);
 
                        money.txt_money.text = "0";

Access of possibly undefined property txt_money through a reference with static type flash.display:Sprite

Вот такую ошибку выдаёт. Сам объект нормально создается, но почему-то к свойствам внутри самого спрайта обратиться нельзя, хотя он там есть

callme 07.02.2015 22:51

public var money:money_load;

illuzor 07.02.2015 23:02

Код AS3:

money = new money_load() as Sprite;


Godwarlock 07.02.2015 23:10

Цитата:

Сообщение от callme (Сообщение 1178774)
public var money:money_load;

Не работает, пишет

Код AS3:

col: 20 Error: Type was not found or was not a compile-time constant: money_load.

Цитата:

money = new money_load() as Sprite;
Этот вариант также не срабатывает, выдаёт ту же ошибку, что нет свойства такого

illuzor 08.02.2015 00:03

Покажите код money_load

callme 08.02.2015 00:08

Код AS3:

public var money:Object;
...
addChild(DisplayObject(money));


Godwarlock 08.02.2015 00:22

Воо спасибо большое callme вот так работает. Можете объяснить почему?

illuzor
Код AS3:

package  {
 
        import flash.display.MovieClip;
 
 
        public class sprite_money extends MovieClip {
 
 
                public function sprite_money() {
                        // constructor code
                }
        }
 
}


callme 08.02.2015 10:07

Пытался написать тебе ответ кратко и доходчиво. Но не получается.

Object и MovieClip - динамические классы, ты можешь добавлять им свойства на лету.

Код AS3:

var mc:MovieClip = new MovieClip();
mc.blablabla = 5;
mc.azaza = 'Ура, товарищи!';

Sprite - закрытый класс, с ним такое не работает. Компилятор проверяет есть ли у класса Sprite такое свойство как "txt_money". Такого свойства у класса Sprite нет, поэтому компилятор ругается.

Более подробно читай в книге Колина Мука "ActionScript 3.0 для Flash". Глава "Динамические возможности языка ActionScript".

caseyryan 08.02.2015 10:20

Цитата:

Sprite - закрытый класс
А MovieClip или DisplayObject значит открытые?
Спрайт просто не объявлен как dynamic
Можно написать свой класс, наследник спрайта и объявить его как dynamic

Код AS3:

public dynamic class MyDynamicClass extends Sprite {
 
}

И тогда с ним тоже прокатит динамическое добавление.

А зачем вообще эта конструкция используется?
Цитата:

Код AS3:

public var money_load:Class = ApplicationDomain.currentDomain.getDefinition("sprite_money") as Class;


В ней действительно есть необходимость?

callme 08.02.2015 10:40

Я использовал терминологию из русского перевода книги Мука.

По его терминологии Object и MovieClip - динамические классы, Sprite и DisplayObject - закрытые классы (в англ. было sealed).


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

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