python - 在我使用方法移动对象后,有没有办法更新对象的原始 x 和 y 位置?
问题描述
我正在创建一个对象块,我在其他参数中分配了一个 X 和 Y 位置,我希望能够通过一个方法move()
通过x
和y
单位移动它并更新原始x
和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 位置。
假设我从 a 开始,
然后block1.xyRange()
返回,当我再次运行时,你会期望它会返回。但是,如果我尝试将move 函数中的and参数添加到and函数,我会收到一条错误消息,指出对象 'Block' 没有属性 'moveX' 或 'moveY'。我认为这是因为它自己调用。但我不知道如何解决它。(2, 2)
block1.move(2, 2)
block1.xyRange()
(4, 4)
self.moveX
self.moveY
X()
Y()
任何建议将不胜感激。
解决方案
在您的 move 方法中,您忘记将更新的(absoluteX 和 absoluteY)值设置为对象字段(self.xPosition 和 self.yPosition)。这就是为什么你永远不会得到更新的值。
推荐阅读
- html - 即使滚动主要内容,如何使固定侧边栏保持在一个位置
- c# - 如何在单独的 .cs 文件中调用 onkeydown 事件
- azure-devops - Azure 中的 Mermaid JS 语法损坏?
- php - 如何将 PDO::FETCH_GROUP 与表连接一起使用,并且只返回按日期排序的连接表中的 3 条记录
- c# - 使用 C# 的基本身份验证在消息中添加新的换行符
- pandas - 如何在 spark 中运行纯 pandas 代码并查看 spark webUI 的活动?
- python - 从数据框中的以下查询中的重复轴错误中获取重新索引
- javascript - 在 express js 中自调用 api 路由
- sql - 如何加快在具有 1000 万条记录的表中运行的查询
- javascript - 只需单击一个按钮即可保存所有数据