我正在制作这个经典风格的小行星游戏,我已经战胜了所有的挑战。现在有一个新的。在
当一颗子弹击中其中一颗小行星时,预期的行为是它消失,然后三到四颗较小的小行星出现在它的位置上,每颗小行星的速度都是随机的,所以看起来像是一种爆炸。但在我刚刚录制的这段视频中,这段奇怪的行为表现了:
正如你所看到的,它完成了它应该做的90%的事情,小行星的消失,然后我按照它的速度创造了四个新的更小的小行星,但是,由于某些原因,当它们应该表现得像正常的小行星时,它们就会解体,因为它们继承了一切。在
游戏源代码可以在这里找到:https://github.com/JuanBonnett/pysteroids
负责处理碰撞子弹的班级有:
asteroids.py
主文件创建所有对象、飞船、小行星生成器和碰撞探测器对象。在
physics.py
CollisionDetector类在哪里,它检测它们何时发生碰撞,并调用它的依赖项来处理碰撞
asteroid.py
有一个小行星发生器,在碰撞的地方产生更小的小行星,我称之为碎片。在
当一颗小行星爆炸时,你给它传递一个
pos
的起始点矢量。在你将同样的矢量实例应用到所有生成的小行星上。在
所有较小的小行星都有相同的
self.pos
值,它们来自同一个母小行星。在它看起来很奇怪,因为
self.points
属性工作正常,更新/翻译正确,因此您看到两个位置互相争斗,并产生混乱/不可预测的行为。在基本上问题是
pos = _pos
中的pos = _pos
行。它应该复制一个矢量,而不是直接给新小行星指定参考。在我发现这一点是通过在小行星渲染代码中打印位置:
print(self.pos.x, self.pos.y)
。我注意到所有的小行星都有相同的self.pos
,但都被假定是随机的速度矢量,所以我认为这可能是一个物体参考问题,并遵循了分配的位置。在相关问题 更多 >
编程相关推荐