我已经开始编写一个连接4游戏(一个点击触发一个光盘下降),我想动画光盘的下跌。 因此,我首先创建一个新的光盘映像:
discList[y][x] = can.create_image((xCan,yCurrent), image=imgRedDisc, anchor="nw")
光盘在画布顶部xCan;yCurrent创建。我现在要做的是制作一张碟片掉到目的地yCan的动画。我调用drop函数,该函数不断增加磁盘的yCurrent,直到它通过递归和after()方法到达yCan:
^{pr2}$现在我的问题是光盘的中间位置不显示,它只在几秒钟后直接显示在底部。 经过一番研究,我添加了一行来更新画布:
def drop(disc):
global yCan, yCurrent
can.move(disc, 0, 1)
yCurrent += 1
can.update()
if yCurrent < yCan:
can.after(5, drop(disc))
现在我看到我的碟片掉下来了,但是每次播放后它都会迟钝;我点击几秒钟后,碟片才开始掉落(这会触发它们的掉落)。另一个问题是,如果我通过快速双击触发两个光盘几乎是一样地掉落,第一个光盘在中途停止下落,然后直接从画布上掉下来。在
我的问题是,如果没有can.update()
,我如何显示光盘坠落的每一步?
另外,我将每个光盘id存储在一个列表(discList)中,有没有更方便的方法来存储动态创建的画布图像?在
在tkinter中制作动画的正确方法是让一个函数执行一帧动画,然后让它反复调用自己,直到出现某种终止条件。在
例如:
与您所写内容的主要区别在于您错误地使用了
^{pr2}$after
。你在做这个:。。。与此完全相同:
注意到区别了吗?与
command
属性类似,必须向函数提供引用。但是,您调用了函数,然后将结果赋给after
。在下面是一个非常简单的实验示例:
相关问题 更多 >
编程相关推荐