1

早些时候我的精灵根本不会移动,所以我发布了代码,我大部分都修复了,但现在我的向上/向下箭头工作正常,但我的右键不起作用。(另外,当您按下两个键,然后放开一个键时,步行动画不起作用,但我现在并不急于解决这个问题。)而且我不想使用用户制作的课程。提前致谢。这是代码:

from pygame.locals import *
import pygame._view

pygame.init()
clock = pygame.time.Clock()

height = 500
width = 500
screen = pygame.display.set_mode((width, height), 0, 32)
pygame.display.set_caption('placeholder text')

photo = 'grassbackground.png'
background = pygame.image.load(photo).convert()

rectexist = False

photo1 = 1

user = pygame.sprite.Sprite()

change = False

up = False
down = False
left = False
right = False

speed = 5

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_UP:
                up = True
                change = True
            if event.key == K_DOWN:
                down = True
                change = True
            if event.key == K_LEFT:
                left = True
                change = True
            if event.type == K_RIGHT:
                right = True
                change = True

        if event.type == KEYUP:
            if event.key == K_UP:
                up = False
                change = False
            if event.key == K_DOWN:
                down = False
                change = False
            if event.key == K_LEFT:
                left = False
                change = False
            if event.key == K_RIGHT:
                right = False
                change = False

    if down and user.rect.bottom < height:
        user.rect.top += speed
    if up and user.rect.top > 0:
        user.rect.top -= speed
    if left and user.rect.left > 0:
        user.rect.left -= speed
    if right and user.rect.right < width:
        user.rect.right += speed

   if change == True:
        pygame.time.wait(110)
        photo1 += 1

    if change == False:
        photo1 = 1

    if photo1 == 1:
        user.image = pygame.image.load("1.png").convert()
        if rectexist == False:
            user.rect = user.image.get_rect()
        rectexist = True
        screen.blit(user.image, user.rect)

    if photo1 == 2:
        user.image = pygame.image.load("2.png").convert()
        screen.blit(user.image, user.rect)

    if photo1 == 3:
        user.image = pygame.image.load("3.png").convert()
        screen.blit(user.image, user.rect)

    if photo1 >= 4:
        photo1 = 1

    thesprites = pygame.sprite.RenderPlain((user))
    thesprites.update()

    screen.blit(background, (0, 0))
    thesprites.draw(screen)

    pygame.display.update()
    clock.tick(60)
4

2 回答 2

2

在你的代码中它说:

if event.type == K_RIGHT:

它应该是:

if event.key == K_RIGHT:

要继续制作动画,您需要稍微更改代码,添加:

key_pressed = []

在一开始的时候。然后对于每个按键块执行:

key_pressed.append(event.key)

和 key-release 做:

key_pressed = [k for k in key_pressed if k != event.key]

而不是change=Truechange=False分别。然后在检查按下和释放的两个部分之后添加这些行:

if len(key_pressed) > 0:
    change = True
else:
    change = False

那应该可以解决您的大部分问题...

于 2012-05-12T19:26:17.037 回答
0

用于pressed = pygame.key.get_pressed()获取当前按下的所有键的字典(实际上是元组,但事物的结构方式可以将其视为字典)。你会这样使用它:

pressed = pygame.key.get_pressed()
if pressed[K_LEFT]:
    # move left
elif pressed[K_RIGHT]:
    # move right
# etc
于 2013-06-02T03:36:05.393 回答