1. 角速度へのx速度、y速度への変換 ax = speed * Math.cos(angle); ay = speed * Math.sin(angle); 2. 加速度の速度への加算 vx += ax; vy += ay; 3. ムービークリップの座標への適用 movieclip.x += vx; movieclip.y += vy; |
var vr:Number=0;//回転速度
var thrust:Number=0;//推進力 ファイヤー
var vx:Number=0;
var vy:Number=0;
this.uchu_sen.fire.visible=false;
stage.addEventListener(Event.ENTER_FRAME, onEF); //フレームが読み込まれ
るたびに
stage.addEventListener(KeyboardEvent.KEY_DOWN, onDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onUp);
function onDown(event:KeyboardEvent):void {
switch (event.keyCode) {
case Keyboard.LEFT :
vr=-5;
break;
case Keyboard.RIGHT :
vr=5;
break;
case Keyboard.UP :
thrust=0.2;
this.uchu_sen.fire.visible=true;
break;
default :
break;
}
}
function onUp(event:KeyboardEvent):void {
vr=0;
thrust=0;
uchu_sen.fire.visible=false;
}
function onEF(event:Event):void {
//角加速度の計算 : x,y座標への適用
uchu_sen.rotation+=vr;
var angle:Number=uchu_sen.rotation*Math.PI/180;
var ax:Number=Math.cos(angle)*thrust;
var ay:Number=Math.sin(angle)*thrust;
vx+=ax;
vy+=ay;
uchu_sen.x+=vx;
uchu_sen.y+=vy;
/* 画面から船がはみ出した時の処理 */
var left:Number=0;
var right:Number=stage.stageWidth;
var top:Number=0;
var bottom:Number=stage.stageHeight;
if (uchu_sen.x-uchu_sen.width/2>right) {
uchu_sen.x=left-uchu_sen.width/2;
} else if (uchu_sen.x + uchu_sen.width / 2 < left) {
uchu_sen.x=right+uchu_sen.width/2;
}
if (uchu_sen.y-uchu_sen.height/2>bottom) {
uchu_sen.y=top-uchu_sen.height/2;
} else if (uchu_sen.y < top - uchu_sen.height / 2) {
uchu_sen.y=bottom+uchu_sen.height/2;
}
}
|
//フラグ 対戦中の時=1 ゲームオーバー時=0
var play_m:int = 1;
//敵のパワー設定
var score_p:int=200;
//敵のパワーの表示
this.score.text = String(score_p);
//弾の数の設定
var dan_p:int=10;
//残り弾数の表示
this.nokori.text = String(dan_p);
/**
*敵キャラの移動とゲームの終了の判断
*/
this.addEventListener(Event.ENTER_FRAME,enemy_move);
function enemy_move(Event) {
//敵キャラの移動
if (this.enemy.x < 450) {
this.enemy.x += Math.floor(Math.random()* 20);
} else {
this.enemy.x -= Math.floor(Math.random()* 500);
}
//ゲーム終了判断
//弾が無くなったら you lose
if (dan_p < 1) {
play_m = 0;//フラグ設定 ゲーム終了のサイン
enemy.visible = rkt.visible = false;//キャラを消す
kekka.text = "YOU LOSE!";//結果表示
score.text = nokori.text = " ";//スコアを消す
hyouji.visible = false;//スコアを消す
}
//敵のパワーが無くなったら you win
if (score_p < 1) {
play_m = 0;//フラグ設定 ゲーム終了のサイン
enemy.visible = rkt.visible = false;//キャラを消す
kekka.text = "YOU WIN!";//結果表示
score.text = nokori.text = " ";//スコアを消す
hyouji.visible = false;//スコアを消す
}
}
/**
*味方(ロケット)の制御
*/
//キーボードでロケットを動かすためリスナー登録
stage.addEventListener(KeyboardEvent.KEY_DOWN,rkt_move);
function rkt_move(evt:KeyboardEvent) {
if (play_m == 0) {
//ゲームオーバーになった場合、イベントリスナーを削除
stage.removeEventListener(KeyboardEvent.KEY_DOWN,rkt_move);
}
trace(evt.keyCode);
if (evt.keyCode == 37) {
//左キーが押された時
this.rkt.x -= 15;
}
if (evt.keyCode == 39) {
//右キーが押された時
this.rkt.x += 15;
}
if (evt.keyCode == 32) {
if (play_m==1) {
//spaceが押された時
dan_p--;//残りの弾数を1減らす
nokori.text = String(dan_p);
//弾をaddChildによって表示
var dan:MovieClip = new tama();
dan.x = this.rkt.x;
dan.y = this.rkt.y;
this.addChild(dan);
//弾の動きを制御するためイベントリスナー登録
stage.addEventListener(Event.ENTER_FRAME,dandou);
function dandou(Event) {
//フレームが読み込まれるたびに、弾のyを-15する
dan.y -= 15;
//弾と敵がぶつかったら
if (dan.hitTestObject(enemy)==true) {
//弾が弾ける
dan.gotoAndPlay(2);
//敵が顔をしかめる。
enemy.gotoAndPlay(29);
//敵のパワーが5減る
score_p-=5;
score.text = String(score_p);
}
}
}
}
}
|