我正在制作这种经典风格的小行星游戏,并且我已经击败了随之而来的所有挑战。现在有一个新的。
当一颗子弹撞击其中一颗小行星时,预期的行为就是消失,然后在它的位置出现三到四颗较小的小行星,每颗小行星都有随机的速度,所以看起来像是一种爆炸。但是这个奇怪的行为显示在我刚录制的视频中:
正如你所看到的那样它完成了它应该做的90%,小行星消失,然后我创造了四个新的和更小的小行星,但是,由于某种原因,当它们表现得像正常的小行星时,它们会消失。他们继承了一切。
可以在此处找到游戏源代码:https://github.com/JuanBonnett/pysteroids
负责处理碰撞Bullet->小行星的班级是:
asteroids.py
主文件创建所有对象,船只,小行星生成器和碰撞检测器对象。
physics.py
CollisionDetector类所在的位置,它会检测它们何时发生冲突并调用其依赖项来执行碰撞操作
asteroid.py
有一个小行星发生器,在碰撞的位置产生较小的小行星,我称之为碎片。
答案 0 :(得分:2)
当小行星爆炸时,你向它传递pos
向量的起点。
您正在将相同的矢量实例应用于所有生成的小行星。
所有较小的小行星与来自同一父小行星的兄弟姐妹具有相同的self.pos
值。
它看起来很奇怪,因为self.points
属性正常工作并正确更新/翻译,所以你看到两个位置互相争斗并产生混乱/不可预测的行为。
问题基本上是pos = _pos
中的AsteroidGenerator.generate
行。它应该是制作矢量的副本,而不是直接将参考分配给新的小行星。
我发现这是通过在您的小行星渲染代码中打印print语句来打印位置:print(self.pos.x, self.pos.y)
。我注意到所有的小行星都有相同的self.pos
,但是被给予了所谓的随机速度向量,所以我认为这可能是一个对象引用问题,并且遵循了被分配的位置。