【发布时间】:2015-01-31 22:28:10
【问题描述】:
在 pygame 中使用精灵时,我最终意识到(由于差异很小),一个精灵不能移动一小部分像素。尽管这是一个合乎逻辑的过程,但我得出的结论是,在不同的角度无法达到相同的速度。
例如:
xmove = 5
ymove = -5
我定义了精灵ball 的两个坐标的移动增量,它在屏幕底部留下一个以 45° 角移动的平台。我希望这个方向相对于它将遇到的障碍有所改变。
以下决定了精灵与屏幕“墙壁”的碰撞:
if ball.rect.left<=0:
xmove = 5
elif ball.rect.right>=700:
xmove = -5
elif ball.rect.top<=0:
ymove = 5
elif ball.rect.bottom>=400:
ymove = -5
这里有一些代码来决定在检测到与player sprite(平台)发生冲突后会发生什么:
if pygame.sprite.spritecollide(ball, player_sprite, False):# and ball.rect.bottom>=player.rect.top:
ymove=-5
if ball.rect.bottomright [0] in range (player.rect.topleft [0], player.rect.topleft [0] + 15):
xmove = -5
elif ball.rect.bottomleft [0] in range (player.rect.topright [0] - 14, player.rect.topright [0] + 1):
xmove = +5
elif ball.rect.bottomright [0] in range (player.rect.topleft [0] + 15, player.rect.topleft [0] + 26):
xmove = -4
ymove = -5.83
elif ball.rect.bottomleft [0] in range (player.rect.topright [0] - 26, player.rect.topright [0] - 15):
xmove = +4
ymove = -5.83
这里的想法是让球根据它撞击平台的位置以不同的角度弹跳,同时保持相同的速度(每刻移动的距离)
所以这里的问题是,为了补偿 x 坐标上一个像素的减少,我使用勾股定理来输出 y 坐标(-5.83)。由于 pygame 不记录像素的分数,这实际上会显着降低球的速度。
所以我的问题是,我该如何解决这个问题(因为我不想被限制在 45° 角...)?
【问题讨论】:
-
四舍五入?每种方式一个像素会有那么大的不同吗?
-
@jonrsharpe 是的,四舍五入有很大的不同
标签: python-3.x pygame pixel