1

好的,这是我当前的程序:

bif="bg.jpg"
mif="pkmn.png"


import pygame
import sys

from pygame.locals import *

pygame.init()

screen=pygame.display.set_mode ((600,375),0,32)
background=pygame.image.load(bif).convert()
mouse_c=pygame.image.load(mif).convert_alpha()

x,y=0,0
movex, movey=0,0

while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

        if event.type==KEYDOWN:
            if event.key==K_LEFT:
                movex=-1
            elif event.key==K_RIGHT:
                movex=+1
            elif event.key==K_UP:
                movey=-1
            elif event.key==K_DOWN:
                movey=+1

        if event.type==KEYUP:
            if event.key==K_LEFT:
                movex=0
            elif event.key==K_RIGHT:
                movex=0
            elif event.key==K_UP:
                movey=0
            elif event.key==K_DOWN:
                movey=0

    x+=movex
    y+=movey

    screen.blit(background,(0,0))
    screen.blit(mouse_c,(x,y))

    pygame.display.update()

问题是,即使我可以向各个方向移动,例如,当我按下右箭头键时,它会向右移动,然后如果我一直按住右箭头键并按住左箭头键,它会向左移动,问题是这样的:当我放开右键时,即使我要向左走,我的精灵也会停止。

我知道问题是当释放右或左时,x 变为 0

我希望能够按住右边然后向右走,然后按住左边然后再往左走,然后松开左边然后向右走,因为我一直在右边

我希望我解释了自己,我已经尝试了所有方法并到处搜索,请帮助我,如果有人可以修改我的代码并将其展示给我以便我可以分析它,那就太好了。

谢谢

4

2 回答 2

1

尝试这个:

import pygame
import sys

from pygame.locals import *


bif="bg.jpg"
mif="pkmn.png"


pygame.init()
FPS = 30  # changed for FPS
FPSCLOCK = pygame.time.Clock()  # changed for FPS

screen = pygame.display.set_mode ((600,375),0,32)
background = pygame.image.load(bif).convert()
mouse_c = pygame.image.load(mif).convert_alpha()

move_speed = 5  # changed for FPS
x, y = 0, 0

while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    pressed = pygame.key.get_pressed()
    if pressed[K_LEFT]:
        x -= move_speed
    if pressed[K_RIGHT]:
        x += move_speed
    if pressed[K_UP]:
        y -= move_speed
    if pressed[K_DOWN]:
        y += move_speed

    screen.blit(background,(0,0))
    screen.blit(mouse_c,(x,y))

    pygame.display.update()
    FPSCLOCK.tick(FPS)  # changed for FPS

编辑 1:我正在运行您的代码,并注意到您没有任何 FPS 监控 - 您只是以 CPU 可以处理的最大速率运行代码。这会导致以后出现问题,所以我添加了代码以确保您的 FPS 永远不会超过 30。

编辑 2:我的旧代码过于复杂;既然您同意左右握持不应该做任何事情;这会奏效。(它也将更具可读性,这有助于保护您免受错误的影响)

于 2013-06-02T00:52:10.237 回答
1

在您的事件循环中,使用pygame.key.get_pressed检查键的状态:

    while True:
        pressed = pygame.key.get_pressed()
        print(pressed[pygame.K_LEFT], pressed[pygame.K_RIGHT])

例如,请参阅此代码

于 2013-06-02T00:36:46.293 回答