SWF ファイルの埋め込み

(サンプル一覧を表示する)

FlashDevelop を使って、SWF ファイルの埋め込みテストをしてみました。

埋め込まれる側(子側)のフレームレートは 60 で作っていますが、
埋め込み側(親側)のフレームレートを 20 にしているので、
子側の速度が 1 / 3 で表示されています。

SWF ファイルの埋め込み

Flashプレーヤーが入っていないか、JavaScriptが無効になっているようです。

Get Adobe Flash player

SWF ファイルの埋め込み
青い枠で囲まれた部分が子側の SWF ファイルです。

ソースコード

親側のソース
package test
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.events.Event;
	
	/**
	 * SWF の埋め込みサンプル
	 * @author Hikipuro
	 */
	public class Main extends Sprite 
	{
		/**
		 * 埋め込み SWF
		 */
		[Embed(source='../../../child/bin/EmbedChild.swf')]
		private var image1:Class;
		
		/**
		 * SWF
		 */
		public var sprite:Sprite;
		
		/**
		 * コンストラクタ
		 */
		public function Main():void 
		{
			trace("Main start");
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		/**
		 * 初期化イベント
		 * @param	e
		 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			trace("init() start");
			sprite = new image1;
			addChild(sprite);
			
			sprite.x = 20;
			sprite.y = 20;
		}
		
	}
	
}		
子側のソース
package 
{
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
	
	/**
	 * SWF 埋め込みのサンプル (埋め込まれる側)
	 * @author Hikipuro
	 */
	public class EmbedChild extends Sprite 
	{
		/**
		 * 埋め込み画像
		 */
		[Embed(source='../image/test001.png')]
		private var image1:Class;
		
		/**
		 * ビットマップ
		 */
		public var bitmap:Bitmap;
		
		/**  
         * 回転の角度  
         */  
        private var angle:int = 0;   
           
        /**  
         * 回転の半径  
         */  
        private var r:int = 40;  
		
		/**
		 * コンストラクタ
		 */
		public function EmbedChild():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		/**
		 * 初期化イベント
		 * @param	e
		 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			// ビットマップの準備
			bitmap = Bitmap(new image1);
			bitmap.cacheAsBitmap = true;
			addChild(bitmap);
			
			graphics.lineStyle(2, 0x8888ff);
			graphics.drawRect(1, 1, 148, 148);
			
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		/**
		 * フレーム開始イベント
		 * @param	event
		 */
		private function onEnterFrame(event:Event):void
		{
			angle += 2;   
            bitmap.x = ((150 - bitmap.width) / 2)  + Math.cos(angle / 180 * Math.PI) * r;   
            bitmap.y = ((150 - bitmap.height) / 2)  + Math.sin(angle / 180 * Math.PI) * r;   
		}
		
	}
	
}		

親側と子側で、同じパッケージ名にすると、
なぜか init() イベントが永久ループのようになってしまうので、
パッケージ名を変えてあります。

同じ名前の Main クラスが定義された SWF ファイルを読み込むと、
クラスが再定義されたようになって、このようなことが起こるんだと思います。
まだ試していませんが、パッケージ名まで変えなくても、
ファイル名さえ変えればエラーが起こらなくなるかもしれません。

リンク