我正在制作这款经典风格的小行星游戏,克服了所有随之而来的挑战。现在有一个新的。
当子弹击中一个小行星时,预期的行为是它消失了,然后三到四个较小的小行星出现在其位置,每个小行星的速度都是随机的,因此看起来像是爆炸。但是相反,我刚刚录制的这段视频显示了这种奇怪的行为:
https://youtu.be/2ZJvOcB-ZKM
如您所见,小行星消失了90%的预期目标,然后我按照它的速度创建了四个新的和较小的小行星,但是由于某种原因,它们在表现得像普通小行星时消失了,因为它们继承了一切。
游戏源代码可以在这里找到:https://github.com/JuanBonnett/pysteroids
处理碰撞Bullet-> Asteroid的类为:asteroids.py
主文件创建所有对象,船,小行星生成器和碰撞检测器对象。physics.py
CollisionDetector类所在的位置,它检测何时发生碰撞并调用其依赖项来处理碰撞asteroid.py
有一个小行星生成器,它在碰撞的地方生成较小的小行星,我称之为碎片。
最佳答案
小行星爆炸时,您正在向其传递开始位置的pos
向量。
您正在将相同的矢量实例应用于所有产生的小行星。
所有较小的小行星与来自同一父本小行星的兄弟姐妹具有相同的self.pos
值。
看起来很奇怪,因为self.points
属性可以正常工作并且可以正确更新/翻译,因此您看到两个位置相互竞争,并表现出混乱/无法预测的行为。
基本上问题是pos = _pos
中的AsteroidGenerator.generate
行。它应该制作矢量的副本,而不是直接将参考分配给新的小行星。
我是通过将打印语句放在小行星渲染代码中的打印位置print(self.pos.x, self.pos.y)
来发现的。我注意到所有小行星都具有相同的self.pos
,但是据推测它们被赋予了随机速度矢量,因此我认为这可能是一个物体参考问题,并在随后进行了分配。
关于python - Pygame-如何消灭小行星并在其位置产生较小的小行星,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41528983/