【问题标题】:Is there a way to update the original x and y position of an object after I move it with a method?在我使用方法移动对象后,有没有办法更新对象的原始 x 和 y 位置?
【发布时间】:2019-09-27 23:55:53
【问题描述】:

我正在创建一个对象块,我在其他参数中分配了 X 和 Y 位置,我希望能够通过 move() 方法通过 xy 单位移动它并拥有原始 @ 987654324@ 和 y 位置已更新,因此当我在移动对象之前调用说 xyRange() 时,我得到了原来的 xy 位置,当我在 move() 之后这样做时,我得到了更新了xy 的位置。

以下是我尝试过的,但我认为我错过了一些关键方面,因为我收到一个错误,即我的对象“块”没有这样的属性。

    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() 函数基本上做同样的事情,但只返回 xy 参数的元组(为了方便起见,我们说一下)。但我似乎不知道如何更新我原来的 X 和 Y 位置。

假设我从返回 (2, 2)block1.xyRange() 开始 然后我block1.move(2, 2),当我再次运行block1.xyRange() 时,你会期望它会返回(4, 4)。但是,如果我尝试将 move 函数中的 self.moveXself.moveY 参数添加到 X()Y() 函数中,则会收到错误消息,指出对象“块”没有属性“moveX”或“moveY”。我认为这是因为它自己调用。但我不知道如何解决它。

任何建议将不胜感激。

【问题讨论】:

    标签: python function class parameter-passing coordinates


    【解决方案1】:
        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
    

    【讨论】:

      【解决方案2】:

      在您的 move 方法中,您忘记将更新的(absoluteX 和 absoluteY)值设置为对象字段(self.xPosition 和 self.yPosition)。这就是为什么你永远不会得到更新的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-02
        • 2017-02-24
        • 2013-04-02
        • 2020-10-23
        相关资源
        最近更新 更多