Форум 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=147129)

Sovnarkom 26.11.2010 19:34

Обращение к переменной родительского мува
 
Дано:
1. основной мув
2. загружаемый в него свф, посредством loader-а
3. переменная в основном муве

Что делаю:
Обращаюсь к переменной основного мува из чайлда:
Код AS3:

trace (parent.parent.pan_displayed);

Не работает.

Пробовал написать функцию. В основном муве:
Код AS3:

var request:URLRequest=new URLRequest("menu.swf");
 
menu.contentLoaderInfo.addEventListener(Event.COMPLETE, menu_loaded);
menu.load(request);
 
function menu_loaded (e:Event) {
 
        trace (menu.content);
        menu.content.loadProperlyLanguage('JPN');
 
}

В подгружаемом:
Код AS3:

public function loadProperlyLanguage(a:String) {
        trace (a);
}

Тоже не работает. Говорит: 1061: Call to a possibly undefined method loadProperlyLanguage through a reference with static type flash.display:DisplayObject.

В чем может быть проблема?

iNils 26.11.2010 19:45

В том, что у DisplayObject, а menu.content это DisplayObject, нет метода loadProperlyLanguage. Вам нужно создаться интерфейс для подгружаемого мува, описать там loadProperlyLanguage
А потом вызвать
Код AS3:

(menu.content as ИмяИнтерфейса).loadProperlyLanguage('JPN');


Sovnarkom 26.11.2010 20:10

Никогда не работал с интерфейсами. Я правильно понимаю, что нужно сделать так:
Код AS3:

package actions{
    public interface ololo {
          function loadProperlyInterface(a:String):void;
    }
    public class main {
          //основной класс, в котором находится loader
          ...
          (menu.content as ololo).loadProperlyLanguage('JPN');
    }
}

?

iNils 26.11.2010 20:28

Нет.
Вы создали интерфейс IOlolo (принято в названии интерфейса добавлять I в имени)
Код AS3:

package {
        public interface IOlolo {
                function loadProperlyInterface(a:String):void;
        }
}

Теперь в главном класс вашего подгружаемого объекта, нужно указать, что вы этот интерфейс используете. Допустим ваш класс называется Test, тогда его минимум такой:
Код AS3:

package {
        public class Test extends Sprite implements IOlolo {
                public function Test () {
 
                }
                public function loadProperlyLanguage (a:String):void {
                        trace (a);
                }
        }
}


Sovnarkom 26.11.2010 21:11

Создал интерфейс, имплементировал класс подгружаемого объекта. Выдает ошибку:

1044: Interface method loadProperlyInterface in namespace actions:IOlolo not implemented by class actions:menu1.

Файл интерфейса:
Код AS3:

package actions {
 
        public interface IOlolo {
                function loadProperlyInterface(a:String):void;
        }
 
}

В основном файле после описания (menu.content as IOlolo) та же проблема, что и была.

Что я делаю не так?

iNils 26.11.2010 21:14

Основной класс покажите и тот, кто его грузит.

Sovnarkom 27.11.2010 15:03

Обращение в основном классе:

Код AS3:

var request:URLRequest=new URLRequest("menu.swf");
 
menu.contentLoaderInfo.addEventListener(Event.COMPLETE, menu_loaded);
menu.load(request);
 
function menu_loaded (e:Event) {
 
        (menu.content as IOlolo).loadProperlyLanguage('JPN');
 
}

Подгружаемый мув:
Код AS3:

public class menu extends MovieClip implements IOlolo {
 
        public function menu():void {
 
                ...
 
        }
 
        public function loadProperlyLanguage(str:String = null) {
                trace (str);
        }
 
}


cleptoman 27.11.2010 15:09

так у вас ругается на класс menu1 ,а не menu

Sovnarkom 27.11.2010 15:19

Ненене, это я эксперименты просто ставил. Сейчас вот что:
1044: Interface method loadProperlyInterface in namespace actions:IOlolo not implemented by class actions:menu.

Сделал файл интерфейса таким, думая, что там должна быть описана именно функция loadProperlyLanguage:
Код AS3:

package actions {
 
        public interface IOlolo {
 
                function loadProperlyLanguage(a:String):void;
 
        }
 
}

Теперь выдает:
1144: Interface method loadProperlyLanguage in namespace actions:IOlolo is implemented with an incompatible signature in class actions:menu.

cleptoman 27.11.2010 15:33

в вашем случае ошибка в том, что в интерфейсе указан возвращаемый тип, а в классе нет.

Код AS3:

package actions {
 
        public interface IOlolo {
 
                function loadProperlyLanguage(a:String);
 
        }
 
}

Добавлено через 4 минуты
но правильно все-таки наоборот )
Код AS3:

public class menu extends MovieClip implements IOlolo {
 
        public function menu():void {
 
                ...
 
        }
 
        public function loadProperlyLanguage(str:String = null):void {
                trace (str);
        }
 
}



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

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