#author("2019-07-28T05:10:12+00:00","default:cho","cho") #author("2019-07-28T05:10:34+00:00","default:cho","cho") [[oc2019]] 改造のヒント * 敵の動きを変える [#se835e25] class Enemy extends Actor { *main() { this.p=$pat_neko+44; this.cy=this.y;//追加:往復する中心の座標 while(this.x>0) { this.x+=this.vx; this.y=this.cy+Math.sin($t)*10;//変更:三角関数で往復させる if (this.rnd(100)<1) { new EnemyBullet({x:this.x, y:this.y}); } yield; } this.die(); } } **やってみよう [#b4fe7acb] - もっとゆっくり振動させるには? - もっと大きい幅で振動させるには? * 敵の形をランダムに変更する [#s5368518] class Enemy extends Actor { *main() { this.p=$pat_neko+44;//★この部分を変更 class Enemy extends Actor { *main() { this.n=this.rnd(2);// 0または1がthis.nに入る if (this.n==0) this.p=$pat_neko+44;// 0だったら if (this.n==1) this.p=$pat_neko+45;// 1だったら **やってみよう [#b4fe7acb] - 3通りの形にするには? * 弾の発射する向きを変える [#me6ef813] ** プレイヤーの動作を変更 [#pc85b75c] class Player extends Actor { *main() { this.p=$pat_neko+45; this.count=0; while (true) { this.x=$mouseX; this.y=$mouseY; if (this.count==30) { new PlayerBullet({x:this.x, y:this.y, vx:10,vy:3});//変更 //★ this.count=0; } this.count+=1; if (this.crashTo(Enemy) || this.crashTo(EnemyBullet)) { break; } yield; } } } ** プレイヤーの弾の動作も変更 [#y2f47e74] class PlayerBullet extends Actor { *main() { this.p=$pat_neko+48; this.vx=10; while (this.x<400) { this.x+=this.vx; this.y+=this.vy;//追加 var c=this.crashTo(Enemy) if (c) { $score++; c.die(); break; } yield; } this.die(); } } **やってみよう [#xd0c9fc3] - ★の部分に命令を追加して,弾が3方向に発射されるようにしよう * プレイヤーの方向に発射する敵弾 [#yeffe830] class EnemyBullet extends Actor { *main() { this.p=$pat_neko+49; // -- ここから追加 if (this.y>$player.y) { this.vy=-1; } else { this.vy=1; } // -- ここまで追加 while(this.x>0) { this.x-=10; this.y+=this.vy;//追加 yield; } this.die(); } } **やってみよう [#r4f2efaa] - もっと角度をつけて発射するには? * ゲームオーバー [#s6bc6d23] プレイヤーが敵に触れたとき「ゲームオーバー」というメッセージを 表示し,スペースキーが押されたか画面をタッチされたらもう一度ゲームを始める. ※「タイトル画面」を作っている人は,ゲームオーバー後にタイトル画面に移動する方法を考えてみよう class Player extends Actor { *main() { this.p=$pat_neko+45; this.count=0; while (true) { this.x=$mouseX; this.y=$mouseY; if (this.count==30) { new PlayerBullet({x:this.x, y:this.y}); this.count=0; } this.count+=1; if (this.crashTo(Enemy) || this.crashTo(EnemyBullet)) { break;//ゲームオーバーになると★に移動 } yield; } //-----★ここを追加 new Label({x:100,y:100,text:"ゲームオーバー"}); this.p=-1;// キャラクタを消す while (true) { if(this.getkey("space")==1 || $touches[0].touched==1){ this.loadPage(Start); } yield; } //--ここまで //this.die(); } } * タイトル画面 [#n5f0637f] 新しく Titleというクラスを作成し、次のように書く class Title extends Actor { *main() { new Actor({x:$screenWidth/2,y:$screenHeight/2,text:"ゲームのタイトル"}); while(true){ if(this.getkey("space")==1 || $touches[0].touched==1){ this.loadPage(Start); } yield; } } } さらに、一番最後の行の setMain(Start); を setMain(Title); に変更する。 **やってみよう [#c0757c41] - 好きなタイトルに変更しよう - 文字の大きさや色を変えよう(「[[サンプルライブラリの詳しい使い方>oc2019api]] 」参照) * 絵を左右反転させる [#s1e11799] *main() *main() { の後ろに this.scaleX=-1; this.scaleY=1; を追加 **やってみよう [#l6b78ca6] - scaleXやscaleYを他の値にすると何が起きる?