2016-10-12 3 views
0

У меня есть простая программа, которая предназначена для перемещения шара влево и вправо по горизонтали внутри холста. Пользователь будет использовать левую и правую клавиши для перемещения шара соответственно на 5 пикселей в раз. Если координата x шара меньше 40 или более 240, то он ничего не сделает.Почему мой объект движется в неправильном направлении

try:  
    import tkinter as tk 
except ImportError: 
    import Tkinter as Tk 

window = tk.Tk() 
game_area = tk.Canvas(width=270, height=400, bd=0, highlightthickness=0, 
         bg="white") 

ball = game_area.create_oval(10, 10, 24, 24, fill="red") 
game_area.move(ball, 120, 4) 
coords = 120 

def move_left(event): 
    global coords 
    if coords < 40: 
     pass 
    else: 
     coords = int(coords)- 5 
     game_area.move(ball, coords, 4) 
    game_area.update() 

def move_right(event): 
    global coords 
    if coords > 240: 
     pass 
    else: 
     coords = int(coords)+5 
     game_area.move(ball, coords, 4) 
    game_area.update() 

window.bind("<Left>", move_left) 
window.bind("<Right>", move_right) 
game_area.pack() 
window.mainloop() 

Однако, нажав либо ключевые шаги мяч в направлении вправо (более 5 пикселей по горизонтали) и с экрана, несмотря на функцию if, которая предназначена для предотвращения этого.

ответ

2

В соответствии с Tkinter Canvas documentation, второй аргумент метода move, dx, является смещением. Попробуйте позвонить как

game_area.move(ball, -5, 4) 

Тогда вам также не понадобится следующая строка.

coords = int(coords)- 5 
+0

Спасибо, но хотя они двигаются в правильном направлении, мяч все еще движется вниз, и я хочу, чтобы он остался там, где он находится в терминах оси y. – Ernxst

+0

@Ernxst Третий аргумент, 'dy', также является смещением. Измените это с 4 на 0. –

+0

Ничего! Я просто установил 4 к 0 после повторного чтения того, что вы разместили. – Ernxst

Смежные вопросы