将列表的排列复制到另一个列表中,反之亦然

时间:2019-03-18 18:01:42

标签: python python-3.x pygame 2d-games

因此,我试图将相互冲突的精灵列表复制到与旧的精灵冲突的新精灵的列表中,同时将每个单独的精灵都排除在自己的列表之外。我知道它令人困惑,所以让我们进一步解释。

有3个(或n个)精灵,每个精灵都有一个列表,该列表收集与之碰撞的精灵。之后,将对收集的精灵进行迭代,以匹配从播放器收到的来自父级的任何移动。他们检测到与固定在子画面矩形每一侧中间的四个唯一的小矩形碰撞,在这种情况下,这是一个完美的正方形。

我们分别将每个父子级精灵称为A,B和C。

如果A与B碰撞,则其列表现在应为A.B。 由于B与A相撞,因此在检查其列表中是否包含B时,其列表应为B.A。每个子画面任一侧上的两个rect失去使用标志再次碰撞的能力。这样可以防止子画面在游戏逻辑中连续碰撞并增加所需的一个以上的值,换句话说,它是永久性的。

我被卡在C精灵上。 我如何将A和B的内容添加到C中,同时将C复制到其他对象,而子画面不在其自己的列表中,或者列表中没有正确的子画面。

本质上:

精灵A的列表中有BC

雪碧B的列表中包含交流电

Sprite C的列表中有AB

例如,如果引入了另一个精灵,以此类推,持续了n次:

Sprite A具有BCD

Sprite B具有ACD

Sprite C具有ABD

雪碧D具有ABC

我已经看到了python集类似问题的答案,但是使用它们遍历每个列表中的sprites时会给我一个错误。

在下面提供的代码中,由于每个组中只有一个Sprite,因此逻辑上在第一次冲突中就没有问题了。

A.B

BA

但是在引入了第三个精灵之后,结果最终像这样:

Sprite A具有B

雪碧B具有交流电

Sprite C具有B

提供更多背景信息。我正在与pygame一起开发一款益智游戏,我想移动一组彼此碰撞在一起的精灵。

这是我很困惑的部分的代码片段:

        # go through all sprites in its group, but not itself
    for i in setup.GreyBlock:
        if i != self:

            # check for collision between the collision shapes
            if self.xlc is False:
                if pygame.Rect.colliderect(self.xlrect, i.xrrect):
                    self.combolist.append(i) if i not in self.combolist else None


                    self.xlc = True

更多上下文的屏幕截图: pic1

pic2

pic3

0 个答案:

没有答案