为什么移动 canvas 对象的功能不起作用
Why is function to move canvas object not working
objective是移动alien1,atarts从0,0开始一直向右移动,向下移动然后一直向左移动,然后向下
from tkinter import *
import random
def enemigos():
global Enemigos #Enemigos downloads the image for alien1
n = random.randint(1,3)
if n == 1:
def movalien1():
alien1 = CanvasJuego.create_image(0,0, anchor = NW, image = Enemigos[0], tags= ('alien1'))
RIGHT1 = True
CoordsAlien1 = CanvasJuego.coords(alien1)
if (CoordsAlien1[0] < 1000 and RIGHT1==True):
CanvasJuego.coords(alien1, CoordsAlien1[0]+5, CoordsAlien1[1])
if ((CoordsAlien1[0]+5)==1000):
RIGHT1 = False
CanvasJuego.coords(alien1, CoordsAlien1[0], CoordsAlien1[1]+50)
elif (CoordsAlien1[0]>0 and RIGHT1==False):
CanvasJuego.coords(alien1, CoordsAlien1[0]-5, CoordsAlien1[1])
if ((CoordsAlien1[0]-5)==0):
RIGHT1 = True
CanvasJuego.coords(alien1, CoordsAlien1[0], CoordsAlien1[1]+50)
def rec():
movalien1()
root.after(20,rec)
root.after(20,movalien1())
Alien1确实出现在(0,0)处,但不会移动。
问题是您每 20 毫秒创建一个新的“外星人”。您应该在 movalien1
之外恰好创建一次 alien1
。发生的事情是您在 0,0 处创建它,然后将其移动到 5.0。外星人在 5,0。下一次通过循环在 0,0 处创建一个 new 外星人,然后将其移动到 5,0。你一遍又一遍地创造新的外星人并将新的外星人移动到 5,0.
此外,您可以使用 move
方法移动项目而不是调整其坐标。
最后,尽管在此代码中实际上并不重要,但您在这里错误地调用了 after
:root.after(20, movealien1())
。它需要是 root.after(20, movealien1)
或直接调用 movealien1()
而不使用 after
.
objective是移动alien1,atarts从0,0开始一直向右移动,向下移动然后一直向左移动,然后向下
from tkinter import *
import random
def enemigos():
global Enemigos #Enemigos downloads the image for alien1
n = random.randint(1,3)
if n == 1:
def movalien1():
alien1 = CanvasJuego.create_image(0,0, anchor = NW, image = Enemigos[0], tags= ('alien1'))
RIGHT1 = True
CoordsAlien1 = CanvasJuego.coords(alien1)
if (CoordsAlien1[0] < 1000 and RIGHT1==True):
CanvasJuego.coords(alien1, CoordsAlien1[0]+5, CoordsAlien1[1])
if ((CoordsAlien1[0]+5)==1000):
RIGHT1 = False
CanvasJuego.coords(alien1, CoordsAlien1[0], CoordsAlien1[1]+50)
elif (CoordsAlien1[0]>0 and RIGHT1==False):
CanvasJuego.coords(alien1, CoordsAlien1[0]-5, CoordsAlien1[1])
if ((CoordsAlien1[0]-5)==0):
RIGHT1 = True
CanvasJuego.coords(alien1, CoordsAlien1[0], CoordsAlien1[1]+50)
def rec():
movalien1()
root.after(20,rec)
root.after(20,movalien1())
Alien1确实出现在(0,0)处,但不会移动。
问题是您每 20 毫秒创建一个新的“外星人”。您应该在 movalien1
之外恰好创建一次 alien1
。发生的事情是您在 0,0 处创建它,然后将其移动到 5.0。外星人在 5,0。下一次通过循环在 0,0 处创建一个 new 外星人,然后将其移动到 5,0。你一遍又一遍地创造新的外星人并将新的外星人移动到 5,0.
此外,您可以使用 move
方法移动项目而不是调整其坐标。
最后,尽管在此代码中实际上并不重要,但您在这里错误地调用了 after
:root.after(20, movealien1())
。它需要是 root.after(20, movealien1)
或直接调用 movealien1()
而不使用 after
.