pygame对象移动一秒钟

2024-09-27 04:24:52 发布

您现在位置:Python中文网/ 问答频道 /正文

代码中的“PlayerRect”出现在屏幕上,我可以移动它,但它只移动了一小部分秒,然后返回到它开始的位置。我用了不同的代码让它移动,但它们都有相同的结果。有什么建议吗?你知道吗

import pygame,sys,os
from pygame.locals import *
pygame.init


MOVERATE = 10
WINDOWWIDTH = 500
WINDOWHEIGHT = 500
def terminate():
     pygame.quit()
     sys.exit()

playerImage = pygame.image.load('Test_Block.png')
playerRect = playerImage.get_rect()

WHITE = (255,255,255,0)

WindowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.update()


WindowSurface.fill(WHITE)
mainClock = pygame.time.Clock()



while True:



     moveLeft = moveRight = moveUp = moveDown = False
     playerRect.topleft = (WINDOWHEIGHT / 2),(WINDOWWIDTH / 2)


     for event in pygame.event.get():
          if event.type == QUIT:
               terminate()


          if event.type == KEYDOWN:
                     if event.key == ord('a'):
                         moveRight = False
                         moveLeft = True
                     if event.key == ord('d'):
                         moveLeft = False
                         moveRight = True
                     if event.key == ord('w'):
                         moveDown = False
                         moveUp = True
                     if event.key == ord('s'):
                         moveUp = False
                         moveDown = True

                     if event.type == KEYUP:
                         if event.type == K_ESCAPE:
                             terminate()
                         if event.key == ord('a'):
                              moveLeft = False
                         if event.type == ord('d'):
                              moveRight = False
                         if event.key == ord('w'):
                              moveUp = False
                         if event.key == ord('s'):
                              moveDown = False


     if moveLeft and playerRect.left > 0:
          playerRect.move_ip(-1 * MOVERATE,0)
     if moveRight and playerRect.right < WINDOWWIDTH:
          playerRect.move_ip(MOVERATE,0)
     if moveUp and playerRect.top >0:
          playerRect.move_ip(0,-1 * MOVERATE)
     if moveDown and playerRect.bottom < WINDOWHEIGHT:
          playerRect.move_ip(0,MOVERATE)

     WindowSurface.blit(playerImage,playerRect)
     pygame.display.update()
     mainClock.tick(30)

Tags: keyeventfalsetrueiftypepygameord
1条回答
网友
1楼 · 发布于 2024-09-27 04:24:52

我怀疑问题在于每次通过循环时都会重置playerRect的位置。走错线播放右上角行并将其移动到while循环之前:

moveLeft = moveRight = moveUp = moveDown = False
playerRect.topleft = (WINDOWHEIGHT / 2),(WINDOWWIDTH / 2)

while True:

     for event in pygame.event.get():
          if event.type == QUIT:
               terminate()

如果这还不能解决问题,追踪位置。在每个循环迭代中,将playerRect的坐标打印到日志文件中。同时跟踪关键事件。这将区分显示故障和定位故障。你知道吗

相关问题 更多 >

    热门问题