1

以前はスプライトがまったく動かなかったので、コードを投稿して大部分を修正しましたが、今では上下の矢印は正常に機能しますが、右のキーは機能しません。(また、2 つのキーを押してから 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_pressed = [k for k in key_pressed if k != event.key]

change=Trueそれぞれとの代わりにchange=False。次に、押されたものと離されたものを確認する 2 つのセグメントの後に、次の行を追加します。

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 に答える