2017-01-08 8 views
1

私はこの古典的なスタイル小惑星ゲームを作っていると私はそれに付属のすべての課題を殴った。今すぐ新しいものがあります。Pygame - どのように小惑星を破壊し、その場所に小さなものを作成する

小惑星が1つの小惑星に当たると予想される動作は消滅し、3つまたは4つの小さい小惑星がその場所に現れ、ランダムな速度を持つため、一種の爆発のように見えます。

https://youtu.be/2ZJvOcB-ZKM

あなたはそれを行うことになっているものの90%、小惑星消えるが、その後、私は4個の新しい、より小さな小惑星を作成するん見ることができるように:私はちょうど記録このビデオではなく、代わりに、この奇妙な行動ショーそのペースは、しかし、何らかの理由で、通常の小惑星のように行動しなければならない時は、すべてを継承するので消滅します。

ゲームのソースコードはここで見つけることができます:衝突弾丸>小惑星の取り扱いを担当するhttps://github.com/JuanBonnett/pysteroids

クラスは次のとおりです。

asteroids.pyメインファイルには、すべてのオブジェクト、船、小惑星ジェネレータを作成します衝突検出器オブジェクトとを含む。

physics.py CollisionDetectorクラスがあり、それらが衝突したときに検出したと衝突

asteroid.pyでものを行うために、その依存関係を呼び出して、私は破片を呼んで、衝突の代わりに小さな小惑星を生成小惑星発電機を持っています。

+0

それぞれの小惑星がいつ、なぜ消滅するのかを記録するコードにいくつかのログを追加することを検討してください。 – Amber

+0

@Amberあなたはどういう意味ですか?どのように私はそれを行うことができますか? –

+0

https://docs.python.org/3/library/logging.html – Amber

答えて

2

小惑星が爆発すると、開始する場所はposです。

あなたは、すべての得られた小惑星に同じベクターインスタンスを適用しています。

すべての小さな小惑星は、同じ親小惑星から来た兄弟と同じself.posの値を持ちます。

self.pointsプロパティが正常に動作し、正しく更新されて翻訳されているため、2つのポジションが互いに戦い、混沌とした/予期しない動作をするため、気が変わってしまいます。

には、pos = _pos行の問題があります。参照を新しい小惑星に直接割り当てるのではなく、ベクトルのコピーを作成する必要があります。

これは、小惑星のレンダーコードにprintステートメントを入れて、位置:print(self.pos.x, self.pos.y)を印刷することで、これを発見しました。私はすべての小惑星が同じself.posを持っていたことに気付きましたが、おそらくランダムな速度ベクトルが与えられていたので、おそらくオブジェクト参照問題であり、それが割り当てられていた場所に従っていたと考えました。

+0

ええと、100%理解していません。コード内の何かを変更して動作させることができましたか?あなたが言ったことに基づいていくつかの変更を加えましたが、進歩を見ていませんでした。それは奇妙だ。 –

+1

githubリポジトリ経由でプルリクエストを送った –

+0

これは私が想定していたものです。ありがとう!とにかく...変化を起こした後、小惑星を撃った後、4つの新しいものが現れますが、いくつかの奇妙な理由で数秒で消滅し、通常の小惑星のように振る舞いません。それをテストしましたか?これは実際に狂っている –

関連する問題