簡體   English   中英

為什么我的運動代碼不起作用?

[英]Why won't my Movement code work?

我試圖使角色四處走動。 我的問題是,當我運行該程序時,它立即停止響應,所以我什至不知道問題出在哪里。 這是我的代碼。

import pygame, sys
from pygame.locals import*

pygame.init()
DISPLAYSURF = pygame.display.set_mode((780, 500), 0, 32)

FPS = 30
fpsClock = pygame.time.Clock()

sprite = pygame.image.load('CharacterFront.png')
spritex = 50
spritey = 50
charLeft = False
charRight = False
charUp = False
charDown = False

while True:

DISPLAYSURF.blit(sprite,(spritex,spritey))

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

    if event.type == KEYDOWN:
        if (event.key == K_LEFT):
            charLeft = True
        elif (event.key == K_d):
            charRight = True
        elif (event.key == K_w):
            charUp = True
        elif (event.key == K_s):
            charDown = True
    if event.type == KEYUP:
        if (event.key == K_LEFT):
            charLeft = False
        elif (event.key == K_d):
            charRight = False
        elif (event.key == K_w):
            charUp = False
        elif (event.key == K_s):
            charDown = False

while charLeft == True:
    spritex -= 10
    sprite=pygame.image.load('CharacterLeft.png')
while charRight == True:
    spritex += 10
    sprite=pygame.image.load('CharacterRight.png')
while charUp == True:
    spritey -= 10
    sprite=pygame.image.load('CharacterBack.png')
while charDown == True:
    spritey += 10
    sprite=pygame.image.load('CharacterFront.png')


pygame.display.update()
fpsClock.tick(FPS)

我已經嘗試了許多不同的方法來執行此操作,但是最接近的方法導致角色被一遍又一遍地粘貼,並且我不得不向垃圾郵件發送方向以實際移動超過10個像素。

您的while char..循環永遠不會結束。 您已經在循環播放( while True:在頂部)。 只需動一動(例如spritey -= 10 )並允許外循環繼續運行。

有關如何在按住鍵的同時保持角色移動的想法,請參閱此問題

除了jonrsharpe所說的之外,您不應在每次按鍵時加載精靈。 而是先加載所有圖像,然后在必要時將其變灰。

因此,您的代碼將如下所示:

sprite_back = pygame.image.load('CharacterBack.png')
sprite_front = pygame.image.load('CharacterFront.png')
sprite_right = pygame.image.load('CharacterRight.png')
sprite_left = pygame.image.load('CharacterLeft.png')

sprite = sprite_front

while True:

    DISPLAYSURF.blit(sprite,(spritex,spritey))

    if charLeft == True:
        spritex -= 10
    elif charRight == True:
        spritex += 10
    elif charUp == True:
        spritey -= 10
    elif charDown == True:
        spritey += 10

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

        if event.type == KEYDOWN:
            if (event.key == K_LEFT):
                charLeft = True
                sprite=sprite_left
            elif (event.key == K_d):
                charRight = True
                sprite=sprite_right
            elif (event.key == K_w):
                charUp = True
                sprite=sprite_back
            elif (event.key == K_s):
                charDown = True
                sprite=sprite_front
        if event.type == KEYUP:
            if (event.key == K_LEFT):
                charLeft = False
            elif (event.key == K_d):
                charRight = False
            elif (event.key == K_w):
                charUp = False
            elif (event.key == K_s):
                charDown = False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM