如何在Pygame中使对象移动到屏幕的末尾?

2024-05-12 23:22:14 发布

您现在位置:Python中文网/ 问答频道 /正文

总的来说,我对Python和编程相当陌生。我正在Pygame上制作一个乒乓球游戏,但在乒乓球(条形)离开屏幕时遇到了问题。代码如下:

    if Move_Down:
        pong1_posY += 10
    if Move_Up:
        pong1_posY -= 10
    if Move_Down2:
        pong2_posY += 10
    if Move_Up2:
        pong2_posY -= 10

    if pong1_posY + pong_size[1] >= ScreenH:
        pong1_posY -= 10
    elif pong1_posY <= 0:
        pong1_posY += 10
    if pong2_posY + pong_size[1] >= ScreenH:
        pong2_posY -= 10
    elif pong2_posY <= 0:
        pong2_posY += 10

请注意,每个上面有“2”的变量都表示右pong。如果没有,则指左侧的乒乓球

代码运行良好。乒乓球不会离开屏幕,但也不会撞到屏幕的尽头。enter image description here

酒吧就到此为止了。为什么会这样?我如何让它们一直显示在屏幕的顶部或底部


Tags: 游戏sizemoveif屏幕编程pygameelif
2条回答

使用^{}^{}将位置限制在边界内

def clamp(value, vmin, vmax):
    return max(vmin, min(vmax, value))
movePong(posY, moveDown, moveUp):
    if moveDown:
        posY += 10
    if moveUp:
        posY -= 10
    return posY
pong1_posY = movePong(pong1_posY, Move_Down, Move_Up)
pong1_posY = clamp(pong1_posY, 0, ScreenH-pong_size[1])

pong2_posY = movePong(pong2_posY, Move_Down2, Move_Up2)
pong2_posY = clamp(pong2_posY, 0, ScreenH-pong_size[1])

我有一个类似的问题与空间入侵者类型的游戏。看起来你跳过了屏幕边缘的像素,因为你一次改变了10个像素的挡板位置。尝试:

if pong1_posY + pong_size[1] >= ScreenH:
   pong1_posY = ScreenH - pong_size[1]
elif pong1_posY <= 0:
   pong1_posY = 0
if pong2_posY + pong_size[1] >= ScreenH:
   pong2_posY = ScreenH - pong_size[1]
elif pong2_posY <= 0:
   pong2_posY = 0

这是假设桨的坐标是桨图像的左上角

相关问题 更多 >