みなさん初めまして。
私は今龍神録プログラミングの館を参考に自作STGを作っているのですが、東方のような弾幕遅延を作ることには成功したのですが、弾を連続的に描画していくと、途中から描画する順番がめちゃくちゃになってとても汚くなってしまいます。
後から出した弾を絶対に手前に描画する方法というのはあるのでしょうか?
描画系のことについて
Re:描画系のことについて
試してないですが…
ソート機能を作ってみてはどうですか?
描写の順番がfor文で配列の若い順になっている場合なら、新しく作られた弾は配列の1番前に入るようにとか?
ただそうしようとするといちいち他の弾が消えたり増えたりするたびにソートを行わないといけないですね…
ソートの度にデータを全部ずらさないと、いけませんし…
だめですかね…
ソート機能を作ってみてはどうですか?
描写の順番がfor文で配列の若い順になっている場合なら、新しく作られた弾は配列の1番前に入るようにとか?
ただそうしようとするといちいち他の弾が消えたり増えたりするたびにソートを行わないといけないですね…
ソートの度にデータを全部ずらさないと、いけませんし…
だめですかね…
Re:描画系のことについて
弾の構造体に構造体と同じポインタを2つ宣言し、
それぞれひとつ前と次のアドレスを格納していくことで可能です。
(そのままでは最初と最後が分からなくなるのでこの2つも別に用意します)
弾を追加するときや弾を消すときは前後を繋ぎ変えます。
詳しくは"自己参照構造体"を参照されると良いと思います。
手っ取り早くそれっぽく見せる方法としては、
空いてる弾の構造体配列を毎回0から検索されていると思いますが
弾を作ったときの構造体配列のインデックスを保存しておいて
次に作るときは前回+1の位置から空き配列を検索していきます。
(前回がi番目で作成したとすると、次はi~最後、最初→i-1の順で空きを検索)
時々順番が狂いますが割といけますよ。
(東方本家もこの方法?)
それぞれひとつ前と次のアドレスを格納していくことで可能です。
(そのままでは最初と最後が分からなくなるのでこの2つも別に用意します)
弾を追加するときや弾を消すときは前後を繋ぎ変えます。
詳しくは"自己参照構造体"を参照されると良いと思います。
手っ取り早くそれっぽく見せる方法としては、
空いてる弾の構造体配列を毎回0から検索されていると思いますが
弾を作ったときの構造体配列のインデックスを保存しておいて
次に作るときは前回+1の位置から空き配列を検索していきます。
(前回がi番目で作成したとすると、次はi~最後、最初→i-1の順で空きを検索)
時々順番が狂いますが割といけますよ。
(東方本家もこの方法?)
Re:描画系のことについて
STL の list で管理してみたらどうでしょうか。
後から出した弾はリストの末尾に追加して、
必要なくなった弾は自身でリストから削除。
描画はリストの先頭から順番に行う。
STL の list は双方向リストで実装されているらしいので
項目の追加・削除もそれほどコストはかからないかと
後から出した弾はリストの末尾に追加して、
必要なくなった弾は自身でリストから削除。
描画はリストの先頭から順番に行う。
STL の list は双方向リストで実装されているらしいので
項目の追加・削除もそれほどコストはかからないかと
Re:描画系のことについて
みなさんの意見を参考にしたらそれっぽいのが出来上がりました!
完全に解決とまではいきませんが、ここからは自分で考えてみようと思います。
ありがとうございました!
完全に解決とまではいきませんが、ここからは自分で考えてみようと思います。
ありがとうございました!