前提・実現したいこと
javascriptでシューティングゲームを作っています。
自機が弾を撃つとき、誰がどう管理すればいいかについてお聞きしたいです。
やりたいこととしては
・自機が弾を撃つ
・main関数のbullets配列に弾を入れ管理したい
該当のソースコード
phina.jsというゲームエンジン(enchan.jsのようなもの)で作っているので下記のコードは実際のものとは違うのですがイメージとしてのコードを載せます。
javascript
1class Player { 2 constructor(x, y, arr) { 3 this.x = x 4 this.y = y 5 this.bullets = arr 6 } 7 shot() { 8 const bullet = new Bulllet(this.x, this.y) 9 this.bullets.push(bullet) 10 } 11} 12 13class Bullet { 14 constructor(x, y) { 15 this.x = x 16 this.y = y 17 } 18} 19 20const main = () => { 21 let bullets = [] 22 const player = new Player(0, 0, bullets) 23 if (key入力があったら) { 24 player.shot() 25 } 26 bulletsを使った処理 27} 28
現在は上記のようにクラスに配列を渡し、そのクラスのメソッドでインスタンスを作り配列に詰めています。
試したこと
・配列をインスタンス時ではなく、メソッドの引数として渡す
異なるクラスで同名のメソッドを用いて抽象化している部分があり、クラスによって渡す配列を変えるという処理を導入しづらいです。
(具体的には当たり判定で各クラスのhitメソッドを呼び、ここでも渡したい配列があります)
質問したいこと
・Playerクラスにわざわざbullets配列を渡すのが変な感じがする
(実際のコードだと他の要素も管理したいため、Playerクラスに様々な配列を渡しています)
・Playerクラスの中でインスタンスを生成するというはどうなのか
(密結合になりすぎている気がします)
上記の点が気になっています。
特に1点目に関してはPlayerにエフェクトを追加するたびにPlayerインスタンスの生成を書き換えなくてはいけないため良くない方法なのだなとは感じています。
シューティングゲームに限らずよくある処理だとは思うのですが、どう管理するのが良いでしょうか。
よろしくお願い致します。
解決後
まとめてコメントさせていただきます。
どの方もとても参考になりました。
少しずつオブジェクト指向を理解するために、とりあえずは戻り値で代入する方法を取りたいと思います。
理由としては状態の変更がmain関数から把握できるため、今の自分でもこんがらがらずに作れそうだからです。
これに慣れたらWorldクラスなどを作ってオブジェクト指向を理解していきたいと思います。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/25 09:14
2018/09/25 09:33
2018/09/25 10:08