我從來沒有做任何交叉腳本到現在爲止,我遇到了,在啓動時(可能是非常愚蠢的)錯誤的權利。ActionScript/Flash - 加載外部,以編程方式創建的SWF?
外部SWF: 我在Flash Professional CS5中創建了一個新的ActionScript 3.0項目。我在第一幀添加了以下腳本:
//Square.fla frame script
import flash.display.Shape;
import flash.events.Event;
var s:Shape = new Shape();
s.graphics.beginFill(0x0000FF, 1.0);
s.graphics.drawRect(-100, -100, 200, 200);
s.graphics.endFill();
s.x = stage.stageWidth/2;
s.y = stage.stageHeight/2;
addChild(s);
addEventListener(Event.ENTER_FRAME, enterFrameEventHandler);
function enterFrameEventHandler(evt:Event):void
{
s.rotation += 2;
}
保存,編譯,完成。這可以很好地作爲獨立的swf,它只是在中央舞臺上顯示一個旋轉的藍色方塊。
主SWF: 我已經在Flash Professional CS5,其中有一個文檔類叫做CrossScriptTest創建一個新的ActionScript 3.0文件:
//CrossScriptTest.as
package
{
//Imports
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.display.Sprite
import flash.display.Loader;
import flash.events.IOErrorEvent;
import flash.net.URLRequest;
import flash.events.Event;
//Class
[SWF(width = "1000", height = "500", backgroundColor = "0x444444")]
public class CrossScriptTest extends Sprite
{
//Constants
private static const SQUARE_SWF_URL:String = "Square.swf";
//Variables
private var SWFLoader:Loader;
//Constructor
public function CrossScriptTest()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.frameRate = 60;
init();
}
//Initialize
private function init():void
{
SWFLoader = new Loader();
SWFLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, IOErrorEventHandler);
SWFLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteEventHandler);
SWFLoader.load(new URLRequest(SQUARE_SWF_URL));
}
//IOError Event Handler
private function IOErrorEventHandler(evt:IOErrorEvent):void
{
trace(evt);
}
//Loader Complete Event Handler
private function loaderCompleteEventHandler(evt:Event):void
{
evt.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR, IOErrorEventHandler);
evt.currentTarget.removeEventListener(Event.COMPLETE, loaderCompleteEventHandler);
var squareSWF:Sprite = Sprite(evt.currentTarget.content);
addChild(squareSWF);
}
}
}
錯誤: 我收到以下錯誤:
TypeError: Error #1009: Cannot access a property or method of a null object reference. at Square_fla::MainTimeline/frame1()
也許我誤解了n跨腳本或加載外部SWF文件的ATURE,但我只能似乎使這項工作,如果我手動繪製在舞臺上顯示對象,而不是如果外部SWF的顯示對象由代碼生成。
是無法加載的編程方式創建的外部swf文件,並將它們添加到主SWF的顯示列表?
是的,在將DisplayObject添加到DisplayList之前,DisplayObject的stage屬性爲null。 –