首先我会说我很累,我已经连续工作了大约 22 小时。无论如何,我在 PONG 游戏中有这个时髦的物理问题。你知道古老的经典。我一直在查看代码很长时间尝试不同的变体,注释掉某些部分等,但我找不到该死的错误!
有人可以帮我一把吗?
这是球的物理问题。当向左移动时,它可以很好地从屏幕的顶部和底部反弹。
但是在它与来自左边的桨相撞后,我不能让它回到右边。它只是迫使反弹了一下,并迫使它返回并越过桨?!
但是,当我将球编程为在击中顶部或底部之一后立即反弹时,我可以将球正确发送,因此我认为将球向右移动的实际代码没有任何问题。
但是向右的移动与游戏所需的物理效果相反,所以它没有用,因为它应该在碰到左侧的桨时反弹并向右移动,它不应该“强迫”它自己越过桨和往左走。
如果你能看到它实际上有点有趣:)
任何人都可以理解这一点并给我一个解释吗?
[代码]
# move the ball around
# if the ball disappears off the either side of the screen, send it back heading left
if ballRect.left > WINDOWWIDTH or ballRect.right < 0:
direction = getRandomDirection()
ballRect.center = (WINDOWWIDTH - ballRect.width, random.randint(100, 200))
if direction == 'downleft':
ballRect.left -= BALLSPEEDX
ballRect.top += BALLSPEEDY
if direction == 'upleft':
ballRect.left -= BALLSPEEDX
ballRect.top -= BALLSPEEDY
if direction == 'downright':
ballRect.left += BALLSPEEDX
ballRect.top += BALLSPEEDY
if direction == 'upright':
ballRect.left += BALLSPEEDX
ballRect.top -= BALLSPEEDY
if ballRect.top < 0:
if direction == 'upleft':
direction = 'downleft'
if direction == 'upright':
direction = 'downright'
if ballRect.bottom > WINDOWHEIGHT:
if direction == 'downleft':
direction = 'upleft'
if direction == 'downright':
direction = 'upright'
if paddleRect.colliderect(ballRect):
if direction == 'upleft':
direction = 'upright'
ballRect.left += BALLSPEEDX
ballRect.top -= BALLSPEEDY
if direction == 'upright':
direction = 'upleft'
ballRect.left += BALLSPEEDX
ballRect.top -= BALLSPEEDY
if direction == 'downleft':
direction = 'upleft'
ballRect.left += BALLSPEEDX
ballRect.top += BALLSPEEDY
if direction == 'downright':
direction = 'upright'
ballRect.left -= BALLSPEEDX
ballRect.top += BALLSPEEDY
[/代码]