キーボード操作でムービークリップを動かすテスト
2009/08/11
『詳細!ActionScript3.0入門ノート』を参考に、ムービークリップを動かすクラスchrmovを作ります。
この書籍の通りにやると、例えば「矢印キーを2つ同時に押して斜めに移動」といったことができないので、
それを解消するためにちょっと工夫を凝らしました。
方針としては、
『キーを押したときにフラグを立て、キーを離したときにフラグを潰す。
フラグが立っている間だけEnterFrameを使って毎フレームムービークリップを動かす』
というもの。
フラグの立て方、潰し方は
Hakuhin's HomePageさんの
論理演算についてというコンテンツを参考にしています。
まず、ムービークリップを矢印キーで動かすクラスchrmovが以下のソース。
package {
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
public class chrmove {
//フラグの設定
var keyflg:int = 0;
const KY_U:int = 0x01;
const KY_D:int = 0x02;
const KY_R:int = 0x04;
const KY_L:int = 0x08;
var chara:MovieClip;
//移動速度の設定
var d:uint = 5;
var dx:int = 0;
var dy:int = 0;
//ステージの縦横最大値を格納して移動可能領域を設定したい。まだ試験中
var w:uint=0;
var h:uint=0;
//コンストラクタ
public function chrmove(mc:MovieClip) {
chara = mc;
//ステージの最大値を設定。試験中
w=chara.stage.stageWidth;
h=chara.stage.stageHeight;
mc.stage.addEventListener(KeyboardEvent.KEY_DOWN,kdwn);
mc.stage.addEventListener(KeyboardEvent.KEY_UP,kup);
mc.stage.addEventListener(Event.ENTER_FRAME,mv);
}
//キーを押したときにフラグを立てる
function kdwn(event:KeyboardEvent):void {
if (event.keyCode == Keyboard.UP) {
keyflg |= KY_U;
}
if (event.keyCode == Keyboard.DOWN) {
keyflg |= KY_D;
}
if (event.keyCode == Keyboard.RIGHT) {
keyflg |= KY_R;
}
if (event.keyCode == Keyboard.LEFT) {
keyflg |= KY_L;
}
}
//キーを離したときにフラグを潰す
function kup(event:KeyboardEvent):void {
if (event.keyCode == Keyboard.UP) {
keyflg &= ~KY_U;
}
if (event.keyCode == Keyboard.DOWN) {
keyflg &= ~KY_D;
}
if (event.keyCode == Keyboard.RIGHT) {
keyflg &= ~KY_R;
}
if (event.keyCode == Keyboard.LEFT) {
keyflg &= ~KY_L;
}
}
//移動させる
function mv(event:Event):void {
//上下
if (keyflg & KY_U) {
dy =-d;
} else if (keyflg & KY_D) {
dy =d;
} else {
dy=0;
}
//左右
if (keyflg & KY_R) {
dx =d;
} else if (keyflg & KY_L) {
dx =-d;
} else {
dx=0;
}
chara.x+=dx;
chara.y+=dy;
//移動可能な範囲の設定。まだ試験中。
if (chara.x <0) {
chara.x=0;
} else if (chara.x > w) {
chara.x =w;
}
if (chara.y <0) {
chara.y=0;
} else if (chara.y > h) {
chara.y =h;
}
}
}
}
次はflaファイルの設定。
メインのタイムラインに次の一文を書きます。
//chrmoveクラスを使う
var tst:chrmove = new chrmove(ply);
最後にステージ上に適当なムービークリップを置き、plyという名前を付けて準備完了。
パブリッシュすればちゃんと動くはず。
戻る。