Python Pygame-如何摧毁小行星并在其位置上创建较小的小行星

Python Pygame-如何摧毁小行星并在其位置上创建较小的小行星,python,pygame,Python,Pygame,我正在制作这个经典风格的小行星游戏,我已经战胜了所有的挑战。现在有一个新的 当一颗子弹击中其中一颗小行星时,预期的行为是它消失,然后三到四颗较小的小行星出现在它的位置上,每颗小行星的速度都是随机的,所以看起来像是一种爆炸。但我刚刚录制的视频中却出现了这种奇怪的行为: 正如你所看到的,它完成了它应该做的90%,小行星消失了,然后我以它的速度创造了四个新的更小的小行星,但由于某种原因,它们消失了,因为它们继承了一切 游戏源代码可在此处找到: 负责处理碰撞子弹->小行星的课程有: asteroids

我正在制作这个经典风格的小行星游戏,我已经战胜了所有的挑战。现在有一个新的

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

正如你所看到的,它完成了它应该做的90%,小行星消失了,然后我以它的速度创造了四个新的更小的小行星,但由于某种原因,它们消失了,因为它们继承了一切

游戏源代码可在此处找到:

负责处理碰撞子弹->小行星的课程有:

asteroids.py
Main文件创建所有对象、船舶、小行星生成器和碰撞检测器对象

physics.py
CollisionDetector类所在的位置,该类检测碰撞的时间,并调用其依赖项来处理碰撞


asteroid.py
有一个小行星发生器,可以在碰撞的地方生成更小的小行星,我称之为碎片。

当小行星爆炸时,你会给它传递一个
pos
矢量,告诉它从哪里开始

您正在将相同的矢量实例应用于所有生成的小行星

所有较小的小行星都具有与来自同一母小行星的同胞相同的
self.pos

这看起来很奇怪,因为
self.points
属性工作正常,更新/翻译正确,因此您看到两个位置相互争斗,产生混乱/不可预测的行为

基本上,问题是
pos=\u pos
生成器中的
generate
行。它应该复制一个矢量,而不是将参考直接指定给新的小行星


我发现这一点是通过将打印语句放在小行星渲染代码中打印位置:
print(self.pos.x,self.pos.y)
。我注意到所有小行星都有相同的
self.pos
,但被假定为随机速度向量,因此我认为这可能是一个对象参考问题,并遵循分配的位置

考虑在您的代码中添加一些日志记录,记录每颗小行星何时以及为何解体。@Amber您是什么意思?任何关于如何执行的示例?使用
print()
(或以@Amber said的身份登录)查看变量中的值以及执行的代码部分。这有助于发现问题。嗯,还没有完全理解。您设法更改了代码中的某些内容以使其正常工作?根据你所说的做了一些改变,但没有看到进展。很奇怪,我通过你的github Repository发送了一个拉取请求,我就是这么想的。谢谢无论如何做出了改变,在你拍摄一颗小行星后,四颗新的小行星出现了,但由于一些奇怪的原因,它们在几秒钟内消失了,表现得不像正常的小行星。测试了吗?这真是太疯狂了