アプリ版:「スタンプのみでお礼する」機能のリリースについて

東方projectみたいな弾幕シューティングゲームを作ってみたいと思い、
python2.7&pygameで初歩的な所から始めているのですが、
肝心の弾幕について悩んでいます。

ベクトルのクラスを作り、弾丸のクラスを作って、
弾一つ一つをインスタンス化して(といってもまとまりごとにべつなインスタンスで管理しています。弾自体が持っているフィールドはベクトルです。)表現してみたのですが、
「画面外に出た弾を消さないと、弾を管理するリストが大きくなりすぎて、弾が増えるにつれfpsが下がる」
ということがわかり、今度は消す機構を取り入れたのはいいのですが、逆に、
画面がチカチカするようになりました。(なくなった部分が抜け落ちているイメージです。。)

そこで質問なのですが、
そもそも弾をインスタンス化すること自体が誤りなのでしょうか?
また、この手のゲームでは弾はどうしているのでしょうか?

なるべくノーヒントで作りたいという無謀な考えで始めたので別段シューティングゲーム作成に特化したサイトや本を読んでいるわけではありません。。(読めよって感じですよね。。)

また「東方弾幕風」は名前は知っていますが使う気はありません。
プログラミングの領域が知りたいです。

言語はなんでも構いませんができればpythonでお願いしたいです。

いろいろとわがままな質問で申し訳ないです。。
回答よろしくお願いします。m(_ _)m

A 回答 (2件)

うーん、久々にこの手の質問に回答するんで、正しい解答になるか分からないけど



聞いている限り、単に画面外まで出てしまった弾の管理が正しくないだけ・・・にみえるかなー
チカチカするってファミコンじゃないんだから、座標そのものが狂ってないと発生しないイメージです。

あと、弾の最大数は予め決めておいたほうがいいかも。
ゲームにもよるけど、シューティングなんて1フレームでどれだけ処理できるかがキモだから
弾が新たに作成される、画面外で削除されるたびにインスタンスの生成、削除は割と無駄なんじゃないかな?と。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。m(_ _)m

お礼日時:2016/07/13 22:23

インスタンス化するのは、派生を作ったりで今後必要なことだと思いますのでその点は大丈夫だと思います。


No.1さんの言うとおり最大数を決めたり、オブジェクトプールにして、先に作っておいて、要らなくなったら回収したりとかの工夫はあってもいいのかなと。
リストが重くなる、というのは、配列のサイズが大きくなって、リストをforeach的何かで走査して実行しているコードが引き起こしていることだと思います。(あるいはレンダリング側の問題かも知れませんが)
そこの中で何か処理時間がかかることを行っていないか、そのあたりを見なおしても良いのかもしれません。

そもそも、チカチカという状況が疑問符なのですが、それはすでに指摘されているようですので割愛です。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。m(_ _)m

お礼日時:2016/07/13 22:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!