2010-02-22 2 views
2

Я могу сделать 2 вещи. Загрузите внешний swf и измените цвет объекта. Когда я совмещаю эти две вещи, это не сработает. Как изменить цвет загруженного SWF? Я хочу получить доступ к именам экземпляров в загруженных swf-файлах.символ доступа в «внешнем» swf AS3

, что мне сказали
Я должен упаковать его и создать класс путей. Есть ли простой способ?

alt text http://www.ashcraftband.com/myspace/videodnd/ball.jpg

ball.swf

"white ball on the stage named blueball" 

load.fla

//load ball.swf 
var bgLoader:Loader = new Loader(); 
bg_mc.addChild(bgLoader); 
var bgURL:URLRequest = new URLRequest("ball.swf"); 
bgLoader.load(bgURL); 

//change color of ball to blue "code works in ball.swf" 
var myColor:ColorTransform = blueball.transform.colorTransform; 
myColor.color = 0x066ccf; 
blueball.transform.colorTransform = myColor; 

ERROR # 1120
доступ неопределенного свойства

ПРИМЕЧАНИЕ
SWF файлы вся-3 ActionScript. Я играл с настройками публикации и безопасности.

ЭКСПЕРИМЕНТ «чтобы понять, с помощью символов во внешних файлах SWF»

ответ

4

У вас не хватает "корень", после того, как swf загружается, вы можете достичь области временной шкалы с помощью root. Рассмотрим следующий пример:

var bgLoader:Loader = new Loader(); 
bg_mc.addChild(bgLoader); 
var bgURL:URLRequest = new URLRequest("ball.swf"); 
bgLoader.load(bgURL); 
bgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded); 

function onLoaded(event:Event):void 
{ 
    // use root to reach the timeline scope of the loaded swf 
    var loadedBlueball:MovieClip = event.target.content.root.blueball; 
    //change color of ball to blue "code works in ball.swf" 
    var myColor:ColorTransform = loadedBlueball.transform.colorTransform; 
    myColor.color = 0x066ccf; 
    loadedBlueball.transform.colorTransform = myColor; 

    // just adding the ball to stage, you might want to add all swf 
    addChild(loadedBlueball); 
} 

«В ActionScript 3 корень собственности относится к основной временной шкале загруженного SWF (а не на временной шкале SWF, который загружен в другую SWF).» от http://www.adobe.com/devnet/actionscript/cookbook/timeline_root.html

+0

У меня была эта проблема во Flash 8 с ActionScript 2, и с помощью myContainClClip._root исправил ее, спасибо! – Parappa

0

Его, потому что SWF загружается разве когда вы пытаетесь изменить цвет. Вам просто нужно использовать событие, и он должен работать

import flash.events.*; 

[...]

var bgLoader:Loader = new Loader(); 
bgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, setMyBallColor); 
bg_mc.addChild(bgLoader); 
var bgURL:URLRequest = new URLRequest("ball.swf"); 
bgLoader.load(bgURL); 

[...]

function setMyBallColor() { 
//change color of ball to blue "code works in ball.swf" 
var myColor:ColorTransform = blueball.transform.colorTransform; // bg_mc.blueball.transform.colorTransform; ? 
myColor.color = 0x066ccf; 
blueball.transform.colorTransform = myColor; // same 
} 
+1

погрузчик не имеет «полное» событие - вы должны добавить слушателя член contentLoaderInfo погрузчика: bgLoader.contentLoaderInfo.addEventListener (Event.COMPLETE, setMyBallColor); – wpjmurray

+0

Да, я добавил слушателя событий, но получил ту же ошибку. Я взял символ из «ball.swf» и поместил его в «load.swf», и НИКАКИЕ ОШИБКИ, просто белые шары. Чего не хватает? Я по-прежнему не имею доступа к внешнему swf. – 2010-02-22 19:34:52

+0

oops пропустил это Не уверен, но для доступа к экземпляру blueball Я думаю, вам нужно использовать getChildAt (0) – RafH

Смежные вопросы