自作ゲームライブラリ Suger.js での進捗第二弾です。
消しゴム君が紙の上で戦いを繰り広げる、「Paper Wars」になります。
更新部分
更新部分は
・角度や移動先x,yを取得するためのユーティリティ関数を追加しています。
・コントローラーを取得するための機能を追加しています。
コントローラー推奨であり、キーボードで操作することはあまり考えていませんが、一応キーボードにも対応していきます。
逆に、PCでやるゲームなので、タップ(タッチ)に対応していません。iOSでリリース予定でない限り、やはりコントローラーで操作した方がいいという結論に、今は至っています。
ゲーム説明
XBoxコントローラーをつないでいる場合、その左スティックで自機(けしごむ)を操作し、Xボタンで弾を打ちます。
実際のゲームでは消しゴムは弾を発射しないので、完全なテスト版ですね。
コード
main.js だけですが、以下のように書けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Suger.init("field", 500, 300, function(){ return [ {name:"eraser",src:"src/eraser001.png",w:128,h:128,xf:1,yf:1}, {name:"bullet",src:"src/bullet002.png",w:32,h:32,xf:1,yf:1} ] }) function moveUnit(unit, degree, velocity){ unit.rotate = degree+90 /* 画像が上向きなので */ let pos = Suger.util.getXy(degree,velocity) unit.x = unit.x+Math.round(pos[0]) unit.y = unit.y+Math.round(pos[1]) } // 弾丸の挙動を設定しています。 // これを発生させて( put した ) インスタンスに対して使うと、 // 動きを付与出来ます。 let actBullet1 = Suger.gear(function(act){ let pos = Suger.util.getXy( act.opt.degree, 10 ) act.target.x = act.target.x + pos[0] act.target.y = act.target.y + pos[1] }) let hero function initGame(){ hero = Suger.put("eraser",50,50,0.5) // ゲームパッドの動きに操作を紐づけます。 Suger.binder.gamePad("leftStick",function(degree){ moveUnit( hero, degree, 2 ) }) Suger.binder.gamePad("buttons",function(buttons){ if( buttons.a.pressed ){ let spos = Suger.util.getXy(hero.rotate-90, 30) let bullet = Suger.put("bullet",hero.x + spos[0],hero.y + spos[1]) bullet.rotate = hero.rotate actBullet1.fire(bullet,{degree:hero.rotate-90/* 画像が上向きなので */}) } }) } Suger.main(function(){ initGame() }) |
かなり短く、そしてきれいに書けるようになったと思います。
ある程度弾幕ゲームを作成したら、次はドラクエ風RPGも再現してみます。