Python 边界框不正确地控制移动

Python 边界框不正确地控制移动,python,tkinter,tkinter-canvas,Python,Tkinter,Tkinter Canvas,我在tkinter重新制作pong,我遇到了两个问题。这两个都是我的杀手锏造成的 这是我的密码 从tkinter导入* 随机输入 ##--设置--## #窗口 window=Tk() 窗口名称(“Pong!”) #运动 up1=错误 down1=False up2=错误 down2=假 #图像 Ball=PhotoImage(file=“Ball.png”) Player=PhotoImage(file=“R.png”) #帆布 游戏=画布(窗口,宽度=700,高度=500)#游戏窗口 Game

我在tkinter重新制作pong,我遇到了两个问题。这两个都是我的杀手锏造成的

这是我的密码

从tkinter导入*
随机输入
##--设置--##
#窗口
window=Tk()
窗口名称(“Pong!”)
#运动
up1=错误
down1=False
up2=错误
down2=假
#图像
Ball=PhotoImage(file=“Ball.png”)
Player=PhotoImage(file=“R.png”)
#帆布
游戏=画布(窗口,宽度=700,高度=500)#游戏窗口
Game.config(bg=“黑色”)
Game.config(scrollregion=Game.bbox(全部))
游戏包()
P1=游戏。创建_图像(20250,图像=玩家)#玩家一
Ba=游戏。创建_图像(350250,图像=球)#球
P2=游戏。创建_图像(680250,图像=玩家)#玩家二
Top=游戏。创建线(1,3700,3,fill=“red”)#Top Hitbox
Dwn=Game.create_line(1499700499,fill=“red”)#底部点击框
右=游戏。创建线(699,1699,500,fill=“red”)#左击框
左=游戏。创建线(2,1,2500,fill=“red”)#右击框
BaX=0.5#随机整数表示球的速度
间隔=0#球Y轴的随机整数
Turn=“P1”#球的最后一击(用于帮助检测命中)
P1Score=0#球员1分
P2Score=0#球员2分
##--定义--##
def KeyDown(事件):#按键控制器
全局向上1,向下1,向上2,向下2,转弯
如果event.char==“w”或event.char==“w”:
up1=真
elif event.char==“s”或event.char==“s”:
down1=真
如果event.char==“i”或event.char==“i”:
up2=真
elif event.char==“k”或event.char==“k”:
down2=真
def KeyUp(事件):#钥匙释放控制器
全局向上1,向下1,向上2,向下2
如果event.char==“w”或event.char==“w”:
up1=错误
elif event.char==“s”或event.char==“s”:
down1=False
如果event.char==“i”或event.char==“i”:
up2=错误
elif event.char==“k”或event.char==“k”:
down2=假
def Check():#用于移动和命中检测的控制器
##--运动检测--##
全局上升1,下降1,上升2,下降2,P1,P2,Ba,间隔,BaX,转弯,P1得分,P2得分
如果up1==True:
游戏移动(P1,0,-1)
elif down1==真:
游戏移动(P1,0,1)
如果up2==True:
游戏移动(P2,0,-1)
elif down2==真:
游戏移动(P2,0,1)
##--球的运动--##
#球
如果间隔==-2:#间隔控制角度
间隔=0.2
elif间隔==-1:
间隔=-0.1
elif间隔==0:
湾=-0.05
elif间隔==1:
间隔=0.1
elif间隔==2:
间隔=0.2
游戏。移动(Ba,BaX,BaY)
##--点击注册表--##
#杀手锏
BaBbox=Game.bbox(Ba)#hitboxs
topbox=Game.bbox(顶部)
DwnBbox=Game.bbox(Dwn)
LBbox=Game.bbox(左)
RBbox=Game.bbox(右)
#球反弹(P1/P2)
如果P1在游戏中。查找重叠(*BaBbox):
BaX=0.5
如果P2在游戏中。查找重叠(*BaBbox):
BaX=-0.5
#球反弹(顶部/Dwn)
如果Ba在游戏中。查找重叠(*TopBbox):
海湾=海湾-海湾-海湾
如果Ba在游戏中。查找重叠(*DwnBbox):
间隔=间隔+间隔+间隔
#得分
如果Ba在游戏中。查找重叠(*LBbox):
P2Score=P2Score+1
开始()
如果Ba在游戏中。查找重叠(*RBbox):
P1Score=P1Score+1
开始()
window.after(2,Check)#调用自身
def Start():#用于启动和重新启动游戏
全球海湾
间隔=random.randint(-2,2)
##--主--##
window.bind(“,向下键)
window.bind(“,KeyUp)
开始()
检查()
window.mainloop()
我的第一个问题是上下边界,有时球会被吸到空隙中,我找不到问题所在。 我的第二个问题是左右边界,它们没有重置


我仍在努力学习如何使用canvas来处理这类事情,所以对于任何草率的代码或我的问题的解决方案是显而易见的,我感到抱歉

“问题是顶部和底部边界”:对于底部,将
BaY=BaY+BaY+BaY
替换为
BaY=-0.5
,以反转方向。您所说的“左侧和右侧边界,它们没有重置”是什么意思?不,出于某种原因,它们没有为我重置