0

だから私は基本的なゲームプログラミングを学んでいて、もちろんゲーム内の弾丸のクラスであるこのBulletクラスを持っています。

bulletGroup = [i for i in bulletGroup if i.buly < screen.get_height()]
for shot in bulletGroup:
    shot.buly -=3

これは私が行ったことなので、すでに画面を通過した箇条書きを削除できました frpm abpve/ ただし、コードの最初の行が機能しない可能性があるため、リストの長さを短縮していないようです。では、オブジェクトのリストをチェックしてから、破棄したいものをすべて削除するにはどうすればよいでしょうか。

編集:はい、オブジェクトを印刷してリストに表示されているかどうかを確認しましたが、それらは間違いなく画面の高さよりも低かったです。それでも、彼らはまだリストの一部ですか?これはすべてゲームループにあります。したがって、すべてのティックには、暴走した弾丸に対して更新される bulletGroup が必要です。

4

2 に答える 2

4

毎回減算3しているので、。より大きくなることはありません。bulyscreen.get_height()

ゲームの動作に応じて、次のいずれかと比較する必要がありbulyます0

bulletGroup = [i for i in bulletGroup if i.buly >= 0]
for shot in bulletGroup:
    shot.buly -= 3

bulyまたは、代わりに3を追加します。

bulletGroup = [i for i in bulletGroup if i.buly < screen.get_height()]
for shot in bulletGroup:
    shot.buly += 3
于 2012-12-29T06:02:34.697 に答える
0

また、弾丸をリストに追加してから削除するよりも、弾丸のプールを固定しておく方がよい場合もあります。代わりに、フレームごとに更新または描画されないように「非アクティブ化」するフラグを設定し、さらに必要なときに新しいフレームを「アクティブ化」します。

弾丸オブジェクトを常に作成および破棄すると、大量のガベージ コレクションが発生し、ゲームが定期的に一時停止することになります。オブジェクトの固定プールを使用すると、それが問題になるのを防ぎ、誤って一度に多くのオブジェクトを作成することを回避できます。

于 2012-12-29T10:09:58.593 に答える