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); } } } } } |