
東方projectみたいな弾幕シューティングゲームを作ってみたいと思い、
python2.7&pygameで初歩的な所から始めているのですが、
肝心の弾幕について悩んでいます。
ベクトルのクラスを作り、弾丸のクラスを作って、
弾一つ一つをインスタンス化して(といってもまとまりごとにべつなインスタンスで管理しています。弾自体が持っているフィールドはベクトルです。)表現してみたのですが、
「画面外に出た弾を消さないと、弾を管理するリストが大きくなりすぎて、弾が増えるにつれfpsが下がる」
ということがわかり、今度は消す機構を取り入れたのはいいのですが、逆に、
画面がチカチカするようになりました。(なくなった部分が抜け落ちているイメージです。。)
そこで質問なのですが、
そもそも弾をインスタンス化すること自体が誤りなのでしょうか?
また、この手のゲームでは弾はどうしているのでしょうか?
なるべくノーヒントで作りたいという無謀な考えで始めたので別段シューティングゲーム作成に特化したサイトや本を読んでいるわけではありません。。(読めよって感じですよね。。)
また「東方弾幕風」は名前は知っていますが使う気はありません。
プログラミングの領域が知りたいです。
言語はなんでも構いませんができればpythonでお願いしたいです。
いろいろとわがままな質問で申し訳ないです。。
回答よろしくお願いします。m(_ _)m
No.1ベストアンサー
- 回答日時:
うーん、久々にこの手の質問に回答するんで、正しい解答になるか分からないけど
聞いている限り、単に画面外まで出てしまった弾の管理が正しくないだけ・・・にみえるかなー
チカチカするってファミコンじゃないんだから、座標そのものが狂ってないと発生しないイメージです。
あと、弾の最大数は予め決めておいたほうがいいかも。
ゲームにもよるけど、シューティングなんて1フレームでどれだけ処理できるかがキモだから
弾が新たに作成される、画面外で削除されるたびにインスタンスの生成、削除は割と無駄なんじゃないかな?と。
No.2
- 回答日時:
インスタンス化するのは、派生を作ったりで今後必要なことだと思いますのでその点は大丈夫だと思います。
No.1さんの言うとおり最大数を決めたり、オブジェクトプールにして、先に作っておいて、要らなくなったら回収したりとかの工夫はあってもいいのかなと。
リストが重くなる、というのは、配列のサイズが大きくなって、リストをforeach的何かで走査して実行しているコードが引き起こしていることだと思います。(あるいはレンダリング側の問題かも知れませんが)
そこの中で何か処理時間がかかることを行っていないか、そのあたりを見なおしても良いのかもしれません。
そもそも、チカチカという状況が疑問符なのですが、それはすでに指摘されているようですので割愛です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Scratch プログラミングについての質問です 1 2022/06/14 19:42
- その他(趣味・アウトドア・車) 東方って結局何なんですか?? 元はZUNさん?が作ったシューティングゲームですよね 種類ありすぎじゃ 1 2022/08/02 10:12
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- 楽器・演奏 ☆彡「初見」という言葉についてご意見をお聞かせください♪ 6 2022/08/24 08:01
- 楽器・演奏 ★ピアノで曲が弾けるようになるには?等の質問に対する回答について 7 2022/04/08 05:51
- 楽器・演奏 ギターは譜面通りに弾くことは出来るのですが、アドリブには全く興味がなかったので、たぶんコードも5つぐ 5 2023/07/23 22:24
- 事件・事故 安部前首相を襲った銃弾への疑問です 7 2022/07/09 08:11
- 楽器・演奏 ★クラッシック・ピアノについての質問です 2 2022/04/15 15:31
- 楽器・演奏 ★普通の方はピアノを暗譜で弾ける曲数は何曲位あるものですか? 6 2022/08/04 17:55
- 心理学 ★こちらの公開掲示板では他の回答者の批判や誹謗中傷はあまりありませんか? 3 2022/05/04 10:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メソッドの引数としてのthisの意味
-
private static という変数の修飾
-
クラス、インスタンス、オブジ...
-
他のファイルの変数参照
-
クラスのメンバ関数の呼出しに...
-
PHPExcel使用で2枚目のシートを...
-
サーブレットでレスポンスが返...
-
VB.NET getとsetの概念がわかり...
-
Delphiでインスタンスが作成さ...
-
VB.netで標準モジュールからフ...
-
別のフォームでインスタンスを使う
-
教えてください。
-
javaのswingで、JLabelを継承し...
-
整数0を値とするBigDecimal
-
Systemクラスはインスタンスが...
-
javaのクラスの作り方、エラー...
-
次の日本語の意味を教えて下さい
-
Form1上にあるTextBox1を Modul...
-
DLLをアセンブリとして読み込み...
-
プログラミング、シューティン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
オブジェクト参照がオブジェク...
-
private static という変数の修飾
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
インスタンス参照でアクセスで...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
VB.NET getとsetの概念がわかり...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
「インスタンス」の意味をわか...
-
[Visual C#] 優先される処理に...
-
javaのクラスの作り方、エラー...
-
クラスのインスタンス名をクラ...
-
C#の構造体の開放のしかた
-
エクセル(複数インスタンス)...
-
VB6.0で、DLLを動的に参照したい
-
C#「オブジェクト参照が必要で...
-
vb.netでFAXを送信する方法
おすすめ情報