我正在尝试制作游戏,我想在玩家移动之前保存其位置(oldPosition),以便以后使用。问题在于,到World.UpdateContents()运行时,oldPosition随self.position一起更新。当self.position改变时,如何保持oldPosition不变?

def Move(self, direction):
    oldPosition = self.position
    print oldPosition
    if direction == "Up":
        if self.position[0] - 1 in World.worldMap[0]:
            self.position[0] -= 1
    if direction == "Down":
        if self.position[0] + 1 in World.worldMap[0]:
            self.position[0] += 1
    if direction == "Left":
        if self.position[1] - 1 in World.worldMap[1]:
            self.position[1] -= 1
    if direction == "Right":
        if self.position[1] + 1 in World.worldMap[1]:
            self.position[1] += 1
    print oldPosition
    World.UpdateContents(world, oldPosition, self.position, self.icon)

最佳答案

属性position是一个列表,当您将其分配给oldPosition时,您将创建对该列表的引用,但是您对position所做的任何修改也将反映在oldPosition上-它们指向同一对象。要解决此问题,请首先复制position,如下所示:

oldPosition = self.position[:]


现在,oldPosition是一个新的不同列表,并且不受position所做更改的影响。

关于python - 尝试存储类变量以供以后使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17914438/

10-08 20:32