我正在制作这款经典风格的小行星游戏,克服了所有随之而来的挑战。现在有一个新的。

当子弹击中一个小行星时,预期的行为是它消失了,然后三到四个较小的小行星出现在其位置,每个小行星的速度都是随机的,因此看起来像是爆炸。但是相反,我刚刚录制的这段视频显示了这种奇怪的行为:

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/

10-12 22:47