如何在按“a”或“d”键移动矩形时将其停止在画布边缘

问题描述 投票:0回答:1

所以我试图用Python在画布上创建一个砖块破坏游戏,我做了一个矩形条,这样球就会碰撞它并反弹回来,问题很简单,我找不到任何 互联网上的解决方案是:我的矩形在按“a”或“d”键时会向左移动 分别是和右,但当它们到达边缘时,我编写了应该停止的代码 它可以进一步移动,但在按画布边缘的“a”或“d”时我的矩形仍然移动,所以请查看我的代码并帮助我,请给我一个方法 这将帮助我学习画布中的碰撞概念。

代码--

import tkinter as tk
from tkinter import *
import time

score = 0

def left(event):

    if paddle_coordinates[0] <= 0 or paddle_coordinates[2] >= 750:  # this is not working
        canvas.move(paddle, 0,0)
    else:
        canvas.move(paddle, -10,0)

def right(event):

    if paddle_coordinates[0] <= 0 or paddle_coordinates[2] >= 750:  # and this one also
        canvas.move(paddle, 0, 0)
    else:
        canvas.move(paddle, 10,0)

window = tk.Tk()
window.title('Game')
window.geometry('800x600+265+50')

score_label = Label(window, font = ('consolas',40), text = 'Score : {}'.format(score))
score_label.pack(side = 'top')

canvas = Canvas(window, width = 750, height = 550, bg = 'black')
canvas.pack(padx = 25, pady = 25)

paddle = canvas.create_rectangle(10,400,110,405, fill = 'white')
window.bind('<a>',left)
window.bind('<d>',right)
paddle_coordinates = canvas.coords(paddle)

window.mainloop()
python tkinter canvas move
1个回答
0
投票

您需要检查实时坐标,而不是启动时保存的副本:

def left(event):
    if canvas.coords(paddle)[0] > 0:
        canvas.move(paddle, -10,0)

def right(event):
    if canvas.coords(paddle)[2] <= 750:
        canvas.move(paddle, 10,0)
© www.soinside.com 2019 - 2024. All rights reserved.