当池塘到达屏幕边界时向玩家添加点数
adding points to player when pong reaches screen boundry
def pong_collision(paddles, pong, size):
''' paddles and pong out of bounds collison '''
for paddle in paddles:
ends = [0, size[0] - paddle.rect.width]
# pong|paddle collision
if paddle.rect.colliderect(pong.rect):
pong.vel.x = -pong.vel.x
pong.music.sound.play(loops=0, maxtime=0, fade_ms=0)
if (ends[1] <= pong.rect.x or pong.rect.x <= ends[0]):
# pong out of bounds collision
if pong.rect.x <= ends[0]:
# add point to right paddle if pong is < 0
if paddle.side == 'right':
paddle.text.value += 1
if pong.rect.x >= ends[1]:
# add poitn to left paddle if pong is > screen size
if paddle.side == 'left':
paddle.text.value += 1
# freezes ball until user starts game
pong.state = False
# resets pong position to initial
pong.rect.topleft = [
(size[0]-pong.rect.width)/2,
(size[1]-pong.rect.height)/2
]
所以我上面有这个 pong 碰撞检测,它检测乒乓球何时到达屏幕边界。假设发生的是得分得分的球员得到一分。然后,球暂停并重置到屏幕中间。一切正常,除了一件事,当正确的球员得分时,分数没有增加。
我很困惑为什么会发生这种情况,显然两个桨的碰撞检测是相同的,那么为什么一个不工作?
因为你有 for paddle in paddles:
,如果球出界,它会在它循环通过两个球拍之前被重置,我的猜测是左边的球拍是一组球拍中的第一个桨.
解决此问题的一种方法是在您确定球出界时遍历球拍以确保评估两个球拍。
def pong_collision(paddles, pong, size):
''' paddles and pong out of bounds collison '''
for paddle in paddles:
ends = [0, size[0] - paddle.rect.width]
# pong|paddle collision
if paddle.rect.colliderect(pong.rect):
pong.vel.x = -pong.vel.x
pong.music.sound.play(loops=0, maxtime=0, fade_ms=0)
if (ends[1] <= pong.rect.x or pong.rect.x <= ends[0]):
# pong out of bounds collision
if pong.rect.x <= ends[0]:
# add point to right paddle if pong is < 0
if paddle.side == 'right':
paddle.text.value += 1
if pong.rect.x >= ends[1]:
# add poitn to left paddle if pong is > screen size
if paddle.side == 'left':
paddle.text.value += 1
# freezes ball until user starts game
pong.state = False
# resets pong position to initial
pong.rect.topleft = [
(size[0]-pong.rect.width)/2,
(size[1]-pong.rect.height)/2
]
所以我上面有这个 pong 碰撞检测,它检测乒乓球何时到达屏幕边界。假设发生的是得分得分的球员得到一分。然后,球暂停并重置到屏幕中间。一切正常,除了一件事,当正确的球员得分时,分数没有增加。
我很困惑为什么会发生这种情况,显然两个桨的碰撞检测是相同的,那么为什么一个不工作?
因为你有 for paddle in paddles:
,如果球出界,它会在它循环通过两个球拍之前被重置,我的猜测是左边的球拍是一组球拍中的第一个桨.
解决此问题的一种方法是在您确定球出界时遍历球拍以确保评估两个球拍。