POPSブログ

AS3でAS2のSWFを使用する

99

  Category:  as22012/05/02 pops 

AS2で作ったSWFを、AS3で使用できないものか考えてみました。


AS3でAS2のSWFを使用する

FLASH9以上を持たない私にとって「FlashDevelop」で作るAS3は便利で在っても、複雑なSWFを作るには効率的では在りません。「AS2のSWF」を、AS3で使用できないものか考えてみました。

  • AS2のSWFを読み込む、またはEmbedで埋め込むことは出来る。
  • AS3からAS2にはアクセスできない。よってBitmap等の操作加工は出来ない。
  • AS3で用意したSpriteなどの容器にいれて、移動またはフィルターなどの加工は出来る。
  • タイマーなどを使用して制御は可能だから、多少効率が悪くとも活用は出来る。
  • 出来ること出来ないことは、実際試して見ないとわからない。

テストにAS3に、AS2のSWFを Load Embed してみました。イラストはドラッグできます。


AS3は確かに軽い、「FLASH9」など買えない私にとって、いかに現在持っている「FLASH8」などを活用するかが課題である。
1. 動かないイラストなどは簡単に読み込めるから活用できる。
2. タイムラインを使用したものも書き方次第では活用できる。
3. AS3での処理の追加も、ある程度は出来る可能性がある。


AS3

FlashTest13c.as


//FlashTest13c

package {
	
	import flash.display.*;
	import flash.net.*;
	import flash.events.*;
	import flash.system.*;
	import flash.text.*;
	import flash.geom.*;
	import flash.filters.DropShadowFilter;
	
	[SWF(width = "465", height = "465", frameRate = "30", backgroundColor = "0xFFFFFF")]
	
    	public class FlashTest13c extends Sprite {
		
		private var layer0:Sprite;
		private var layer1:Sprite;
		private var layer2:Sprite;
		private var layer3:Sprite;
		private var illust:Sprite;
		private var tf:TextField;
		private var btn_1:Sprite;
		private var btn_2:Sprite;
		private var btn_3:Sprite;
        	public var loader:Loader;
		//背景イラスト番号
		private var back_no:int = 0;
		private var illust_no:int = 0;
		//フィルター
		private var filter_flag:Boolean = false;
		private var shade:DropShadowFilter = new DropShadowFilter(1, 90, 0x000000, 0.4, 4, 4, 2, 3, false, false);
		
		[Embed(source = 'assets/illustmc004.swf')]
		private var Illustmc:Class;
		
        	public function FlashTest13c() {
			
			//BASE/黒背景
			graphics.beginFill(0x000000);//0x000000
			graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
			graphics.endFill();
			
			//createグラデ背景/0xB18D8D,0xF591B2,0x000000
			var grad_square:Sprite = draw_grad_box(stage.stageWidth, stage.stageHeight, 0xF591B2, 0x000000);
			addChild(grad_square);
			
			//白背景レーヤー
			layer0 = createSquare(0, 0, stage.stageWidth, stage.stageHeight, 0xFFFFFF, 1);
			addChild(layer0);
			layer0.visible = false;
			
			//illust
			layer1 = new Sprite();
			layer1.x = 50;
			layer1.y = 50;
			addChild(layer1);
			layer1.visible = true;
			
			//welcome
			layer2 = new Sprite();
			layer2.x = 80;
			layer2.y = 300;
			addChild(layer2);
			
			//text
			layer3 = new Sprite();
			addChild(layer3);
			//text
			tf = createTextField(10, 5, stage.stageWidth - 20, 20);
			tf.textColor = 0xFF0000;
			tf.text = "";
			tf.selectable = false;
			layer3.addChild(tf);
			
			//btn
			btn_3 = createRoundBTN("フィルター", 13, 0x000000, 60, 20, 0xCCCCCC, 1, 5);
			btn_3.x = 290;
			btn_3.y = 445;
			addChild(btn_3);
			//btn_3にListenerを設定
			btn_3.addEventListener( MouseEvent.CLICK, filter_chg );
			
			btn_2 = createRoundBTN("画像切替", 13, 0x000000, 60, 20, 0xCCCCCC, 1, 5);
			btn_2.x = 360;
			btn_2.y = 445;
			addChild(btn_2);
			//btn_2にListenerを設定
			btn_2.addEventListener( MouseEvent.CLICK, illust_chg );
			
			btn_1 = createRoundBTN("背景切替", 13, 0x000000, 60, 20, 0xCCCCCC, 1, 5);
			btn_1.x = 430;
			btn_1.y = 445;
			addChild(btn_1);
			//btn_1にListenerを設定
			btn_1.addEventListener( MouseEvent.CLICK, back_chg );
			
			var url:String = "/main/flash/mvlinetext200.swf";
			var urlReq:URLRequest = new URLRequest(url);
			loader = new Loader();
			loader.load(urlReq, new LoaderContext(true));
			//ロードの完了を待つ
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
		}
		
		private function onComplete(e:Event):void {
			
			//illustmc004.swfは古いバージョンのものなのでswf全体(loader)をaddChildするほかない
			layer2.addChild(e.target.loader);
			
			//読み込むものの原点が不明なので、原点あわせは難しい
			//embed-swfの読み込み可能だ
			illust = new Illustmc();
			illust.x = 0;//200
			illust.y = 0;//100
			illust.scaleX = 2;
			illust.scaleY = 2;
			layer1.addChild(illust);
			
			tf.text = "Embedしたイラストの大きさ W:" + illust.width + " H:" + illust.height;
			
		}
		//イラスト切替
		private function illust_chg(e:MouseEvent):void {
			if (layer1.visible == true) { layer1.visible = false; }
			else { layer1.visible = true; }
		}
		//背景切り替え
		private function back_chg(e:MouseEvent):void {
			if (back_no == 0) { back_no = 1; layer0.visible = true;}
			else { back_no = 0; layer0.visible = false; }
		}
		//フィルター切り替え
		private function filter_chg(e:MouseEvent):void {
			if (!filter_flag) {
				layer1.filters = [shade];//filter
				layer2.filters = [shade];//filter
				filter_flag = true;
			} else {
				layer1.filters = null;//filter
				layer2.filters = null;//filter
				filter_flag = false;
			}
		}

		//create-box
		private function createSquare(x:Number, y:Number, width:Number, height:Number, color:Number, alpha:Number):Sprite {
			var s:Sprite = new Sprite();
			s.graphics.beginFill(color, alpha);
			s.graphics.drawRect(x, y, width, height);
			s.graphics.endFill();
			//addChild(s);
			return s;
		}
		//create-GradBox
		private function draw_grad_box(w:uint, h:uint, color1:uint, color2:uint):Sprite {
			var gb:Sprite = new Sprite();
			var colors:Array = [color1, color2];
			var alphas:Array = [1, 1];
			var ratios:Array = [0, 255];
			var matrix:Matrix = new Matrix();
			matrix.createGradientBox(w * 1.5, h * 1.5, 0, -w * 0.25, -h * 0.25);
			gb.graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, matrix, SpreadMethod.PAD, InterpolationMethod.RGB, 0);
			gb.graphics.drawRect(0, 0, w, h);
			gb.graphics.endFill();
			//addChild(gb);
			return gb;
		}
		//create-text
		private function createTextField(x:Number, y:Number, width:Number, height:Number):TextField {
			var result:TextField = new TextField();
			result.x = x;
			result.y = y;
			result.width = width;
			result.height = height;
			//addChild(result);
			return result;
		}
		//create-RoundBTN/原点中央ボタンモードなど訂正
		private function createRoundBTN(text:String, t_size:int, t_color:uint, width:Number, height:Number, color:uint, alpha:Number, round:Number):Sprite {
			var rsbt:Sprite = new Sprite();
			rsbt.graphics.beginFill(color, alpha);
			rsbt.graphics.drawRoundRect(-width/2, -height/2, width, height, round);
			rsbt.graphics.endFill();
			addChild(rsbt);
			var r:TextField = new TextField();
			var fmt:TextFormat = new TextFormat('_ゴシック', t_size, null, null, null, null, null, null, TextFormatAlign.CENTER );
			r.defaultTextFormat = fmt;
			r.textColor = t_color;
			r.selectable = false;
			//r.autoSize = TextFieldAutoSize.LEFT;
			r.text = text;
			r.width = width;
			r.height = height;
			r.x = -width / 2;
			r.y = -height / 2 + 2;
			r.mouseEnabled = false;
			//buttonMode
			rsbt.buttonMode = true;
			rsbt.addChild(r);
			return rsbt;
		}

	}
}

以上です。



[ この記事のURL ]


タグ:flash , ActionScript , as3 , as2

 

ブログ記事一覧

年別アーカイブ一覧



[1]