質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
Box2D

Box2Dは、C++で記述された2D物理演算エンジン。C++以外にも多くの言語に移植されています。円形・多角形の物体の運動をシミュレーションすることが可能で、GUIで動作を確認できるテストベッドが付属されています。

Q&A

1回答

403閲覧

シューティングで弾2つ発射して弾が消えてからまた2つ発射出来るにしたいのですがどのようにすれば出来ますか?

TamaT

総合スコア1

Box2D

Box2Dは、C++で記述された2D物理演算エンジン。C++以外にも多くの言語に移植されています。円形・多角形の物体の運動をシミュレーションすることが可能で、GUIで動作を確認できるテストベッドが付属されています。

0グッド

0クリップ

投稿2021/08/09 21:26

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Cで説明します。他の言語でも考え方は一緒です。
やり方は、いろいろありますので、初心者の方にもわかりやすい方法を紹介します。

以下①, ②を配列にします。配列の要素数 BULLET_MAX を増やせば画面上に同時出る弾の数を増やせます。

①弾がアクティブかどうか(画面上に出ているかどうか) ・・・FALSE で初期化します。

bool bullet_is_active[BULLET_MAX];

とし、

bullet_is_active[0]

は 0番目の弾が画面上に出ているかどうかを表すことにします。true で出ている、false で出ていない、です。

・弾の座標も同じように配列にします。

double bullet_x[BULLET_MAX]; double bullet_y[BULLET_MAX];

とし、

bullet_x[0],bullet_y[0]

は0番目の弾の画面上の座標を表すことにします。

簡単のために、配列を分けましたが、普通は、is_active, x, y の構造体を定義して、構造体配列にするのが一般的かとおもいます。

●弾の発射は以下のように行います。

 発射ボタンが押されたら、
もしアクティブでない状態(画面に出ていない状態)の弾があれば、弾を画面に出す、
ということをします。

具体的には、bullet_is_active を for で順次調べていき、
FALSE な弾があれば、その弾を TRUE にし、弾の座標を自機の座標にする
ということをします。
そうすれば、すべての弾が TRUE で画面に出ている状態なら、
いくら発射ボタンを押しても弾はでません。

●メインループの中では、常に、弾を動かします。

 もしアクティブ状態(画面に出ている状態)の弾があれば、弾を動かす、
ということをします。

 具体的には、bullet_is_active を for で順次調べていき、
TRUE なら、弾を動かします。
インベーダーゲームのような弾の動かし方なら、弾のY座標を一定数引けばいいですね
(画面の上端をY=0と想定)
メインループを何度も通るたびに、Y座標が減っていくので、
弾が上に動いていくように見えます。
次に、弾の消滅です。
弾の座標を動かしたときは、画面の端に行ったかをチェックします。
インベーダーゲームの場合は、Y<0 となったら、弾が画面の上端まで行ったので消滅させます。
消滅は、bullet_is_active を FALSE にするだけです。

さて、実装してみればわかりますが、発射ボタンを押すと、メインループを通るたびに弾が出てしまうので、連続して弾が出てしまいます。
「発射ボタンが押されたら、弾を出す」と書きましたが、厳密には、
前回弾が発射されてから、しばらくの間は弾が出ないようにするとか、
弾の発射条件を「ボタンを離した状態から、押した状態に移行したら」とするなどの工夫が要ります。

投稿2021/08/09 22:47

ak.n

総合スコア291

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問