gpt4 book ai didi

python - tkinter中的Pong碰撞方法

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:29 26 4
gpt4 key购买 nike

在 pong 碰撞检测方面遇到了一些麻烦。我为 Pong 创建了一个类,初始化了我的 Canvas ,窗口的属性等以及乒乓球的速度。使用图像创建 Racket ,然后使用 PIL 将它们调整为我想要的 Racket 尺寸,同样用于乒乓球。

现在我正在使用 canvas.coords 方法来检测我的 Racket 和球的当前位置。根据我的 CPSC 页面,这应该返回右上角和左下角/左下角的四个值,然后我可以使用这些值检测碰撞。

但是,它只返回两个值,并且它一直检测屏幕下方 Racket 中点的碰撞 -就像说 Racket 在屏幕中间的最顶部,然后球在 Canvas 的中心经过,它会检测到碰撞并改变速度。下面贴出了碰撞的相关代码。

def animate_pong_ball(self):
self.C1.move(self.animated_ball, self.pong_dx, self.pong_dy)
x1, y1 = self.C1.coords(self.animated_ball)

if x1 <= 0:
self.pong_dx *= -1
elif x1 > WINDOW_WIDTH / 2:
self.pong_dx *= -1
if y1 <= 0:
self.pong_dy *= -1
elif y1 > WINDOW_HEIGHT:
self.pong_dy *= -1

def detect_collisions(self):

p1_x, p1_y = self.C1.coords(self.paddle_1)
p2_x, p2_y = self.C1.coords(self.paddle_2)
b_x, b_y = self.C1.coords(self.animated_ball)

if p1_x == b_x or p2_x == b_x:
self.pong_dx *= -1
if p1_y == b_y or p2_y == b_y:
self.pong_dy *= -1

完整代码在 http://pastebin.com/KfEkpsAN知道粗略副本中存在错误,目前只是试图让碰撞正常工作,但无法找出问题所在

最佳答案

正如您所发现的(以及正确文档中的记录),canvas.coords(x) 返回的坐标数取决于 x 的类型。无论出于何种原因,您将桨和球创建为图像,并使用 .create_image 添加到 Canvas 。图像是相对于 x,y anchor 显示的,除非您另有指定,否则这是图像的中心。

要获得用于碰撞检测的正确边界框,请使用填充矩形和填充圆来表示桨和球(这是原始游戏所做的,也是最简单的事情),因此 .coords(x) 返回边界框,或者根据图像中心和已知图像大小自行计算边界框。

对于 y 坐标在直线上方的矩形桨和圆形球的正确交点代码取决于球中心的 x 坐标是否在直线的端点内(如果 y 距离为交点小于半径),小于线外的半径(因此球可能会击中角),或更远(没有交叉点)。

关于python - tkinter中的Pong碰撞方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27762540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com