articles

2010 年 4 月 28 日

AS3 最前面にもってくるDisplayObjectContainer

var sprite:Sprite=new Sprite();
sprite.setChildIndex(btn_obj,sprite.numChildren-1);

よくつかうので書いてあった気がするのですが・・・
ひさびさにFlashやると忘れてました。悲しい。

2010 年 1 月 15 日

AS3 シンプルなボタンの作り方

CATEGORYflash   TAG 12:16 PM

MCのフレームに _up と _over というラベルを付けて

mc.enabled

だけです。
簡単なものだったらこれで作りたいとこです。

mc.addEventlistener(MouseEvent.ROLL_OVER,rollOverHandler);
mc.addEventlistener(MouseEvent.ROLL_OUT,rollOutHandler);
function rollOverHandler(event:MouseEvent){
     event.currentTarget.gotoAndStop("_over");
}
function rollOutHandler(event:MouseEvent){
     event.currentTarget.gotoAndStop("_up");
}

このくらいの記述が省略できます。

2010 年 1 月 14 日

AS3 getChildByName()

CATEGORYDisplayObjectflash   TAG 1:05 PM

よく
getDefinitionBy〜だとかよくまちがえるのでメモしました。
DisplayObjectContainerクラスのメソッドです。

btn_mc=this.getChildByName("btn_"+id)

昔はこれと何がちがうのか、どういうときにつかうのかよくわからなかったです。

btn_mc=this["btn_"+id]

2009 年 11 月 6 日

Flash flashvarsでハマる。

CATEGORYLoaderinfo   TAG 8:12 PM

信じられないくらいハマってしまいました。
原因はわからないんですが・・・
そもそも loaderInfoかLoaderInfoかってところまで疑いはじめて。

おそらく、CyberDuckで上書きをしない設定になってたので
アップされていなかったのが原因っぽいのですが納得いきません。

パラメータ一覧を出すスクリプトをいれたタイミングでなぜかクリア。
もやもやしてます。

var paramObj:Object=loaderInfo.parameters;
for (var i:String in paramObj) {
	tf.appendText(i + "=" + paramObj[i] + "\n");
}

2009 年 9 月 17 日

AS3 loaderで読み込まれたswfからメインタイムラインにアクセスしたい

loaderで読み込まれたswfからメインタイムラインにアクセスしたいとき。

maintimline=loaderInfo.loader.root as MovieClip;

今日気づいたんですが、

MovieClip(loaderInfo.loader.root);

という書き方もあるんですね。

2009 年 9 月 13 日

AS3 クラスの参照

以下のようにすることで文字列のクラス名をgetDefinitionByNameに渡して
参照できるようです。
すごく基本的なことっぽいです。

import flash.utils.getDefinitionByName;
var ClassReference:Class;
ClassReference=getDefinitionByName(class_name) as Class;
var instance=new ClassReference();

2009 年 8 月 30 日

AS3 リンゲージしたmcをリンゲージ名で配置

CATEGORYgetDefinitionByName   TAG 1:47 PM

名前でクラスを取得する場合

getDefinitionByName(class_name) as Class

とできるようです。
すごく基礎的なところなようです。
サンプル

package {

	import flash.display.MovieClip;
	import flash.utils.getDefinitionByName;
	
	public class Pref {

		var mc:MovieClip;
		var ClassReference:Class;
		
		function Pref(class_name) {
			ClassReference=getDefinitionByName(class_name) as Class;
		  mc=new ClassReference() as MovieClip;
     }
	}
}

これで

var hokkaidou= new Pref( "北海道" );

としてリンゲージしたmc「北海道」が利用できます。
備考ですが、変数名・リンゲージ名などは日本語が使えるんですね。

2009 年 8 月 28 日

AS3 TextFormatを外部クラスにしてみましたが

CATEGORYTextFormat   TAG 4:56 PM

当初staticでクラスメンバとしてやってたのですが
個別に変更する場合難しいので、インスタンスのメンバにしました。

staticのものは以下
AS3 共通のTextFormatを複数のクラスで用いてみる

これ本来はsetterとgetterをつかうべきだと思いました。
クラスのプロパティを参照するのはよくないんですよね?
今度はsetterとgetterについて調べてみます。
※基礎だとおもいますがおろそかになっています。

TextStyle.as

package {

	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;

	class TextStyle {

		public var textformat_default:TextFormat=new TextFormat();
		public var textformat_hover:TextFormat=new TextFormat();
		
     //コンストラクタ
		function TextStyle() {
			//初期状態用スタイル
			textformat_default.size=13;
			textformat_default.font="_sans";
			textformat_default.color=0xEEEEEE;
			textformat_default.bold=true;

			//ホバー時状態用スタイル
			textformat_hover.size=15;
			textformat_hover.font="_sans";
			textformat_hover.color=0xEEEEEE;
			textformat_hover.bold=true;
        	}
	}
}

flaファイル

import TextStyle;
var text_style=new TextStyle();
var d_format=text_style.textformat_default;
var hover_format=text_style.textformat_hover;

2009 年 8 月 18 日

AS3 円運動のクラス

円運動をさせる場合、軸をずらしたmcを作りrotationを変更していたのですが
やはり基礎的なところなので作っておきました。

CircleMove.as

package {
	import flash.display.Sprite;
	import flash.events.Event;

	public class CircleMove {
		var my_sprite:Sprite;
		var my_radius:uint
		var my_speed:uint;
		var degree:uint=0;
		var centerX=0;
		var centerY=0;
		var speed:uint;
		function CircleMove(sprite:Sprite,radius,speed) {
			my_sprite=sprite;
			my_radius=radius;
			my_speed=speed;
			centerX=my_sprite.x
			centerY=my_sprite.y
			my_sprite.addEventListener(Event.ENTER_FRAME,move);
		}
		function move(event) {
			var radian = Math.PI/180*degree;
			my_sprite.x=centerX+my_radius*Math.cos(radian);
			my_sprite.y=centerY+my_radius*Math.sin(radian);
			degree+=my_speed;
		}
	}
}

flaファイルは

import CircleMove;
var cm=new CircleMove(ball,100,5);

さらに、JSONで渡したかったので継承したクラスを作成しました。
こんなこと普通しなそう・・・

CircleMove2.as

package {
	public class CircleMove2 extends CircleMove {
		function CircleMove2(obj:Object) {
			my_sprite=obj.sprite;
			my_radius=obj.radius;
			my_speed=obj.speed;
			super(my_sprite,my_radius,my_speed);
		}
	}
}

この場合のflaファイルは

import CircleMove2;

var cm=new CircleMove2({sprite: ball,radius:100,speed:5});

さらに、回転開始のオフセットを設定できるようにしました。
CircleMove3.as

package {
	public class CircleMove3 extends CircleMove2 {
		function CircleMove3(obj:Object) {
			degree=obj.degree;
			super(obj);
		}
	}
}

この場合のサンプルflaファイルは

import CircleMove3;

//リンゲージしたクラスBALL
var ball2=new BALL();
var ball3=new BALL();
prepare(ball2);
prepare(ball3);

//準備用の関数
function prepare(mc:MovieClip){
	mc.x=stage.stageWidth/2;
	mc.y=stage.stageHeight/2;
	addChild(mc);
}

var cm2=new CircleMove2({sprite:ball2,radius:100,speed:5});
var cm3=new CircleMove3({sprite:ball3,radius:100,speed:5,degree:180});//180度から開始

となりました。