如何阻止玩家角色离开屏幕边缘并停在边界?
这是我的代码:
from tkinter import *
HEIGHT = 800
WIDTH = 500
window = Tk()
window.title('Colour Shooter')
c = Canvas(window, width=WIDTH, height=HEIGHT, bg='black')
c.pack()
ship_id = c.create_rectangle(0, 0, 50, 50, fill='white')
MID_X = (WIDTH/2)-25
c.move(ship_id, MID_X, HEIGHT-50)
left_bound= c.create_line(0, 0, 800, 0,)
right_bound= c.create_line(500, 0, 500, 500,)
SHIP_SPD = 10
def move_ship(event):
if event.keysym == 'Left':
c.move(ship_id, -SHIP_SPD, 0)
elif event.keysym == 'Right':
c.move(ship_id, SHIP_SPD, 0)
c.bind_all('<Key>', move_ship)
from math import sqrt
def collision_bound():
dist_left = left_bound.x + ship_id.x
if dist_left < 0:
c.move(ship_id, 50, HEIGHT-50)
dist_right = right_bound.x - ship_id.x
if dist_right > WIDTH:
c.move(ship_id, WIDTH - 50, HEIGHT-50)
我对python很新,而且我没有教我如何解决这个问题。所以任何帮助将不胜感激
答案 0 :(得分:1)
您可以使用c.coords(ship_id)
获取船舶的位置,然后您可以检查是否允许他们移动。
尝试替换
if event.keysym == 'Left':
c.move(ship_id, -SHIP_SPD, 0)
elif event.keysym == 'Right':
c.move(ship_id, SHIP_SPD, 0)
使用
shipPosition = c.coords(ship_id)
if event.keysym == 'Left' and shipPostion[0] > c.coords(left_bound)[0]:
c.move(ship_id, -SHIP_SPD, 0)
elif event.keysym == 'Right' and shipPosition[0] < c.coords(right_bound)[0]:
c.move(ship_id, SHIP_SPD, 0)
只有当玩家的位置大于左边界的x位置时才允许玩家左移,并且只有当玩家的位置小于右边界的x位置时才允许玩家向右移动。
但是,由于船的位置由左侧确定,您可能希望将其更改为
elif event.keysym == 'Right' and shipPosition[0] < c.coords(right_bound)[0] - 50:
c.move(ship_id, SHIP_SPD, 0)
其中50是船的大小。