【发布时间】:2020-11-04 06:17:14
【问题描述】:
下面我定义了一个 pygame 游戏循环。我可以在 8 个方向上移动精灵。
#player position
def player(x,y):
screen.blit(playerImg, (x, y))
#enemy position
def enemy(x,y):
screen.blit(enemyImg, (x, y))
def fire_bullet(x,y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletImg, (x + 16, y + 10))
# Game Loop
running = True
while running:
#fill values RGB - Red, Green, Blue
screen.fill(bc.goodblue)
#background immage
screen.blit(background, (0,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
#if keystroke is pressed
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT or event.key == ord('a'):
playerx_change = -movespeed
if event.key == pygame.K_RIGHT or event.key == ord('d'):
playerx_change = movespeed
if event.key == pygame.K_UP or event.key == ord('w'):
playery_change = -movespeed
if event.key == pygame.K_DOWN or event.key == ord('s'):
playery_change = movespeed
if event.key == pygame.K_SPACE and bullet_state == "ready":
bulletx = playerx
fire_bullet(bulletx, bullety)
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == ord('a') or event.key == ord('d'):
playerx_change = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == ord('s') or event.key == ord('w'):
playery_change = 0
#player movement
playery += playery_change
playerx += playerx_change
if playerx <= 0:
playerx = 0
if playerx >= width - PImgWidth:
playerx = width - PImgWidth
if playery <=0:
playery = 0
if playery >=height - PImgHeight:
playery = height - PImgHeight
#enemy movement
enemyx += enemyx_change
if enemyx <= 0:
enemyx_change = enemyspeed
enemyy += enemyy_change
if enemyx >= width - EImgWidth:
enemyx_change = -enemyspeed
enemyy += enemyy_change
player(playerx, playery)
enemy(enemyx, enemyy)
pygame.display.update()
pygame.quit()
但是,有一个小问题。
如果我按下左箭头键,精灵会向左移动。如果我再按右箭头键,精灵就会开始向右移动。
如果我松开左箭头键,精灵就会停止。我不希望这种情况发生。如果我朝正确的方向移动并且我松开左箭头键,我想继续朝正确的方向移动。
我不知道一种有效的设置方法。
【问题讨论】: