[目次|前回|次回|Reference]

ネイティブ衝突判定

Time-stamp: "2009-12-07 Mon 14:24 JST hig"

TextFieldを用いた入力の取得

メソッドcreateTextFieldで作ったTextFieldのプロパティtypeの値をinputとすると, ユーザが入力できるフィールドになります. ここに入力が起きたときには, イベントハンドラonChangedが呼ばれるので, その中で入力を読み取ることができます.

var a:String;
var b:Number;

this.createTextField("textinput", this.getNextHighestDepth(),10,10,120,30);
textinput.type="input"
textinput.text="test";

this.createTextField("textoutput", this.getNextHighestDepth(),10,40,120,30);
textoutput.text="no input";

this.createTextField("numinput", this.getNextHighestDepth(),10,70,120,30);
numinput.type="input"
numinput.text="3";

this.createTextField("numoutput", this.getNextHighestDepth(),10,100,120,30);
numoutput.text="no input";

textinput.onChanged = function(){
	a=textinput.text;
	textoutput.text=a + "が入力されました";
}

numinput.onChanged = function(){
	b=numinput.text;
	numoutput.text=b +"の7倍は" + b *7;
}

また, createTextFieldでなく, Flash IDEでステージに直接テキストボックスを置くこともできます.

課題

自分のプログラムで, 速さ, ブロックの個数, 色などを, ユーザの入力によって変更できるようにしてみよう.

オブジェクト指向---シンボルとリンクされたクラス

.fla で適当なシンボルをライブラリに登録し, リンケージの識別子をmbとしましょう. これに加えて, クラスをMovingBallとしましょう. このシンボルを1個ステージ上に配置して, インスタンス名をmb1としましょう.

以下のmain.asをいつものように使用します(.flaの第1フレームアクションでincludeします)


mb1.moveTo(0,200);

attachMovie("mb","mb2",this.getNextHighestDepth());
mb2._x=200;
mb2._y=100;
mb2.moveTo(100,100);

さらに, 以下をMovingBall.asを同じフォルダに保存します. 大注意: このファイル名は任意ではありません. 上のクラス名と一致させる必要があります.

MovieClipを継承したクラスに, そのオブジェクト特有の変数や関数(onEnterFrameのようにあらかじめ決められているものも含む)を定義することができます.


var a:String;
var b:Number;

this.createTextField("textinput", this.getNextHighestDepth(),10,10,120,30);
textinput.type="input"
textinput.text="test";

this.createTextField("textoutput", this.getNextHighestDepth(),10,40,120,30);
textoutput.text="no input";

this.createTextField("numinput", this.getNextHighestDepth(),10,70,120,30);
numinput.type="input"
numinput.text="3";

this.createTextField("numoutput", this.getNextHighestDepth(),10,100,120,30);
numoutput.text="no input";

textinput.onChanged = function(){
	a=textinput.text;
	textoutput.text=a + "が入力されました";
}

numinput.onChanged = function(){
	b=numinput.text;
	numoutput.text=b +"の7倍は" + b *7;
}

組み込みの衝突判定

メソッドhitTestを使うと簡単に当り判定ができる場合があります. 使い方は2通り. ball1,ball2をともにMovieClipオブジェクトだとしましょう.

シンタックス1:hitTest(mc)


onEnterFrame=function(){
  if(ball1.hitTest(ball2)){
///
  }
};
ball1,ball2が衝突したかどうかの判定です. 実際には, ball1,ball2の境界ボックスの間の衝突を判定しています.

シンタックス2:hitTest(x,y,true/false)


onEnterFrame=function(){
  if(ball1.hitTest(10,20,true){
///
  }
};
ball1が(そこにオブジェクトがあるかどうかは問わず)点(x,y)と重なったかどうかの判定です. 第3引数がfalseの場合は, シンタックス1同様にball1の境界ボックスを利用して判定します. trueの場合はball1の形を真剣に考えて判定します.

課題

自分のプログラムで, 当り判定をこのメソッドをつかってやってみよう.