AS3 二次元配列

2009年09月01日(火)

とうとう9月になってしまいました。
AS3の二次元配列記述例です。
メモしときます。

var pref_name_list=new Array(["北海道","hokkaido"],["青森","aomori"],["秋田","akita"],["岩手","iwate"],["宮城","miyagi"],["新潟","niigata"]);

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

2009年08月30日(日)

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

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「北海道」が利用できます。
備考ですが、変数名・リンゲージ名などは日本語が使えるんですね。

BetweenAS3 イージングについて

2009年08月30日(日)

BetweenASでのイージングは、第5引数にタイプ(Cubicなど)とそのプロパティ(in,outなど)
を指定する形になっているみたいです。

import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.easing.*;
BetweenAS3.tween(test_mc, { x:100 }, null, 1.0, Cubic.easeOut).play();

なにも指定しないとlinearになるようです。
easingパッケージには以下のものがありました。
Back
Bounce
Circ
Circular
Cubic
Custom
Elastic
Expo
Exponential
Linear
Physical
Quad
Quadratic
Quart
Quartic
Quint
Quintic
Sine

これとeaseIn,easeOut,easeInOut,easeOutIn,になるのでしょうか??
わかりません。

BetweenAS3 基本

2009年08月30日(日)

いつの間にかTweenerの開発が終了していたみたいです。
Tweener大好きでした。ありがとうございました。
とはいえ、まだ使っていきます。

Tweenerの後継としてBetweenAS3を利用したいと考えています。

一番簡単と思われるサンプルです。

import org.libspark.betweenas3.BetweenAS3;
BetweenAS3.tween(test_mc, {x: 100, y: 100},null,0.2).play();

Tweenerですごく便利だったDisplayShortcutsなどと同等の機能は
実装されるんでしょうか、そこが気になります。

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

2009年08月28日(金)

当初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;

AS3 円運動のクラス

2009年08月18日(火)

円運動をさせる場合、軸をずらした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度から開始

となりました。

AS3 Flash IDEを判別 System.capabilities.playerTypeで

2009年08月11日(火)

Flashの開発環境をFlash IDEというらしい。普通のFlashのことです。
TweenerのアニメーションをブラウザではなくFlash IDEで見る場合に
Tweenerのタイムスケールを変更して早送りにするサンプルがドキュメントにありました。


import flash.system.Capabilities;

if (flash.system.Capabilities.playerType == "External") Tweener.setTimeScale(0.5)

ちなみにplayerTypeの種類は以下のようです。

“StandAlone” - スタンドアローン Flash Player
“External” - 外部の Player またはムービープレビューモードで使用される Flash Player
“PlugIn” - Flash Player ブラウザプラグイン
“ActiveX” – Microsoft Internet Explorer で使用される Flash Player ActiveX コントロール

AS3 Timer.currentCount

2009年08月11日(火)

Timerの現在のカウント数のプロパティです。
なにかと使う場面が増えてきました。

var timer=new Timer(1000);
timer.addEventListener(TimerEvent.TIMER,timerAction);
timer.start();

function timerAction(event){
 trace( event.target.currentCount );
}

AS3 Event.REMOVED記念日

2009年08月11日(火)

Event.ADDEDがあればEvent.REMOVEDもありますよね。
今日知りました。
タイトルが変なのは自分で検索しやすいようにです。

test_mc.addEventListener(Event.REMOVED,removeAction);
removeChild(test_mc);

function removeAction(event) {
	trace(event.target.name);
}

こないだテレビでやってたクライマーズハイを見ました。

AS3 TweenerのsetTimeScaleを試すつもりが

2009年08月08日(土)

TweenerのsetTimeScaleを試すつもりが
なぜかKeyのことについて色々勉強することとなりました。
へたくそっ!このコード!

key_test1.fla

import caurina.transitions.Tweener;
import KeyEvent;

var key_event=new KeyEvent(test_mc);

stage.addEventListener(MouseEvent.CLICK,clickHandler);

function clickHandler(event) {
	trace("押された");
	Tweener.removeTweens(test_mc);
	test_mc.x=90
	Tweener.addTween(test_mc,{time:10,x:500,transition:"linear"});
}

function setTweenerTimeScale() {
	Tweener.setTimeScale(5);
	trace("setTweenerTimeScale");
}
function setTweenerTimeScaleDefault() {
	Tweener.setTimeScale(1);
	trace("setTweenerTimeScale");
}

KeyEventSample.as

package {
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	import flash.display.MovieClip;

	public class KeyEventSample {
		var my_mc:MovieClip;
		public function KeyEventSample(mc) {
			my_mc=mc;
			my_mc.stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
			my_mc.stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
		}

		function keyDownHandler(event) {
			if (event.shiftKey) {
				trace("シフトキーが押された");
			}
			trace("押された");
		}

		function keyUpHandler(event) {
			trace(event.keyCode)
			if (event.keyCode==16) {
				trace("シフトキーが離された");
			}
			trace("離された");
		}
	}
}

KeyEvent.as

package {
	import KeyEventSample;

	public class KeyEvent extends KeyEventSample {
		var mainTimeLine:MovieClip;
		public function KeyEvent(mc) {
			super(mc);
			mainTimeLine=my_mc.root as MovieClip;
		}

		override function keyDownHandler(event) {
			trace("オーバーライドされた関数");
			mainTimeLine.setTweenerTimeScale();
		}
		override function keyUpHandler(event) {
			trace("オーバーライドされた関数");
			stageObj.setTweenerTimeScaleDefault();
		}

	}
}