Есть ли способ обновить исходную позицию x и y объекта после того, как я переместил его методом? - PullRequest
0 голосов
/ 10 мая 2019

Я создаю объектный блок, которому я присваиваю X и Y позицию среди других аргументов, я хочу иметь возможность перемещать его через метод move() на x и y единиц и иметь исходный * Позиция 1004 * и y обновлена, поэтому, когда я звоню сказать xyRange() перед перемещением объекта, я получаю исходную позицию x, y, а когда я делаю это после move(), я получаю обновлены позиции x, y.

Ниже приведено то, что я пробовал, но мне кажется, что я упускаю какой-то важный аспект, потому что я получаю сообщение об ошибке, что у моего объекта «Блок» нет такого атрибута.

    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.

Скажем, я начинаю с block1.xyRange(), который возвращает (2, 2) тогда я block1.move(2, 2), который вы ожидаете, когда снова наберете block1.xyRange(), вернет (4, 4). Но если я пытаюсь добавить параметры self.moveX и self.moveY из функции перемещения в функцию X() и Y(), я получаю сообщение об ошибке, в котором говорится, что у объекта «Блок» нет атрибута «MoveX» или «MoveY». Я предполагаю, что это потому, что это само по себе Но я не могу понять, как это исправить.

Любые предложения будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019
    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
0 голосов
/ 10 мая 2019

в вашем методе перемещения вы забыли установить обновленные значения (absoluteX и absoluteY) для полей объекта (self.xPosition и self.yPosition).Вот почему вы никогда не получите обновленное значение.

...