使用pygame.key.get_pressed()创建边框

时间:2019-03-24 03:21:30

标签: python pygame

我正在编写一个自上而下的射击游戏,最近正试图找出一种方法,可以在按住键的同时连续移动角色。我正在互联网上寻找方法,发现pygame.key.get_pressed()的效果很好,直到尝试创建边框,这样您才无法逃离屏幕的两侧。我基本上已经解决了以下问题:当您按住移动键时,pygame无法检查玩家的x和y坐标,因此,即使您添加了{{1}之类的东西,它也允许玩家移出界线}。

我问是否有一种方法可以为屏幕的两侧创建边框,同时按住if x >= 0:的移动按钮,或者是否有很好的替代方法。

一些代码:

pygame.key.get_pressed()

我已经尝试添加(以16为边框)

    if eventHandler == "LEVEL1":
        # SEE IF PLAYER QUIT AND PROCEED TO QUIT
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                loop = False

            if event.type == pygame.KEYDOWN:

                keys = pygame.key.get_pressed()

                if keys[pygame.K_UP]:
                    movingUP = True
                if keys[pygame.K_DOWN]:
                    movingDOWN = True
                if keys[pygame.K_LEFT]:
                    movingLEFT = True
                if keys[pygame.K_RIGHT]:
                    movingRIGHT = True

            if event.type == pygame.KEYUP:
                movingUP = False
                movingDOWN = False
                movingLEFT = False
                movingRIGHT = False
                x_change = 0
                y_change = 0

            if movingUP == True:
                y_change -= 5 
            if movingDOWN == True:
                y_change += 5
            if movingLEFT == True:
                x_change -= 5
            if movingRIGHT == True:
                x_change += 5

    # UPDATES EVERY TIME GAME LOOPS
    pygame.display.update()
    clock.tick(60)
    x += x_change
    y += y_change
    if eventHandler == "LEVEL1":
        w.blit(level1map, (0, 0))
        w.blit(player, (x, y))
        pygame.display.update()

,以此类推。我基本上在代码中有意义的任何地方尝试了此操作。我也尝试过放

if x >= 16:
    x_change = 0
    movingLEFT = 0

“和变量> =边界”在可能会产生边界的任何地方,但仍然没有结果。

有什么方法可以创建可以使用的边框或移动的替代方法?

1 个答案:

答案 0 :(得分:0)

  

[...]按住移动键时,pygame无法检查玩家的[x]和[y]坐标,[...]

否。

按住移动键时,不会发生任何事件。按下键时有一个pygame.KEYDOWN事件,而释放键时有一个pygame.KEYUP事件。
但是,按下一个键时不会连续发生事件。

非常适合通过(pygame.key.get_pressed())在事件循环中获得按下的键并更改控制变量movingUPmovingDOWNmovingLEFT的状态movingRIGHT。由pygame.event.get()处理事件时,由pygame.key.get_pressed()返回的值将更新。

但是每次更改位置(xy)时,都必须在每一帧中进行 bounds 检查。它必须在主游戏循环中完成,而不是在事件循环中完成:

maxX = # screenWidth - playerWidth  
maxY = # screenHeight - playerHeight 

while loop:
    if eventHandler == "LEVEL1":
        # SEE IF PLAYER QUIT AND PROCEED TO QUIT
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                loop = False

        if event.type == pygame.KEYDOWN:
            keys = pygame.key.get_pressed()
            if keys[pygame.K_UP]:
                movingUP = True
            # [...]

        if movingUP == True:
            y_change -= 5 
        # [...]

x += x_change
y += y_change

if x < 0:
    x = 0
    x_change = 0
elif x > maxX
    x = maxX
    x_change = 0
if y < 0:
    y = 0
    y_change = 0
elif y > maxY
    y = maxY
    y_change = 0