在我用方法移动一个对象之后,有没有办法更新它原来的x和y位置?

2024-10-02 18:20:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个对象块,我在其他参数中分配了一个X和Y位置,我希望能够通过方法move()xy单位移动它,并更新原始的xy位置,以便在移动对象之前调用say xyRange()时,我得到原始的xy位置,当我在move()之后这样做时,我得到了更新的xy位置。你知道吗

下面是我尝试过的,但我认为我遗漏了一些关键的方面,因为我得到了一个错误,我的对象“Block”没有这样的属性。你知道吗

    def X(self):
        x = self.xPosition
        return x

    def Y(self):
        y = self.yPosition
        return y

    def xyRange(self):
        xRange = self.X() + self.toBlock.absX()
        yRange = self.Y() + self.toBlock.absY()
        return xRange, yRange

    def move(self, moveX=None, moveY=None):
        absX = self.absX()
        absY = self.absY()
        self.moveX = moveX
        if(self.moveX == None):
            moveX = 0
        self.moveY = moveY
        if(self.moveY == None):
            moveY = 0
        absoluteX = absX + moveX
        absoluteY = absY + moveY
        return absoluteX, absoluteY

    def absX(self):
        absoluteX = self.X() + self.toBlockId.absX()
        return absoluteX

    def absY(self):
        absoluteY = self.Y() + self.toBlockId.absY()
        return absoluteY

所以我有函数X()Y()从构造函数中获取参数,并且能够在其他函数中操作它们,还有absX()absY()来跟踪对象在网格中的实际位置,还有xyRange()函数,它基本上做相同的事情,但是只返回x的元组,y参数(假设为方便起见)。但我似乎不知道如何更新我原来的X和Y位置。你知道吗

假设我从返回(2, 2)block1.xyRange()开始 然后我block1.move(2, 2),当我再次运行block1.xyRange()时,您会期望它返回(4, 4)。但是如果我尝试将move函数中的self.moveXself.moveY参数添加到X()Y()函数中,我会得到一个错误,即对象“Block”没有属性“moveX”或“moveY”。我想这是因为它在召唤自己。但我不知道怎么修。你知道吗

如有任何建议,将不胜感激。你知道吗


Tags: 对象函数selfnone参数movereturndef
2条回答
    def move(self, moveX=None, moveY=None):
    self.moveX = moveX
    if(self.moveX == None):
        moveX = 0
    self.moveY = moveY
    if(self.moveY == None):
        moveY = 0
    self.absoluteX = self.absX() + moveX
    self.absoluteY = self.absY() + moveY
    return self.absoluteX, self.absoluteY

在move方法中,您忘记为对象字段设置更新的(absoluteX和absoluteY)值(自我定位以及自我定位). 这就是为什么你永远得不到更新的值。你知道吗

相关问题 更多 >