2016-02-16 12 views
-1

我一直在嘗試將精靈位移到屏幕(當向上移動時)改變爲精靈的後視圖。Python 3.4 - Pygame:根據旅行方向改變精靈圖像時出現的問題

目前精靈只是在每個按鍵上的白色背景上按最近的x和y座標,而不是沿着屏幕流暢地移動(我想要在設置的軌跡上連續移動精靈,基於箭頭鍵按下,就像蛇一樣)。

這是我第一次嘗試編寫任何關於python的東西,所以Leyman的條件如果可能的話!

lead_x_change = 0 
lead_y_change = 0 

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameExit = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       lead_x_change = -5 
      if event.key == pygame.K_RIGHT: 
       lead_x_change = 5 
    #above are two snips of code to show the method i'm using to move the sprite 

      if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_DOWN: 
       gameDisplay.fill(white) 
       gameDisplay.blit(spriteX,(lead_x,lead_y)) 
       pygame.display.update() 
      if event.key == pygame.K_UP: 
       gameDisplay.fill(white) 
       gameDisplay.blit(spriteY,(lead_x,lead_y)) 
       pygame.display.update() 

    lead_y += lead_y_change   
    lead_x += lead_x_change 
    clock.tick(60) 

pygame.quit() 
quit() 
+0

管通過插入到排序比特的修補後的問題: 'gameDisplay.fill(白色) 如果lead_y_change> = 0: gameDisplay.blit(spriteX,(lead_x,lead_y)) 如果lead_y_change < 0: gameDisplay.blit(spriteY,(lead_x,lead_y))' – Croutom

回答

0

我認爲有兩種合理的方法可以根據你移動的方向改變你的精靈。

首先,讓我們解決當前圖形邏輯,讓你無論繪製按鍵的精靈:

while not gameExit: 
    for event in pygame.event.get(): # event loop handles setting player speed 
     if event.type == pygame.QUIT: 
      gameExit = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       lead_x_change = -5 
      if event.key == pygame.K_RIGHT: 
       lead_x_change = 5 

    lead_y += lead_y_change # update logic moves the position 
    lead_x += lead_x_change 

    gameDisplay.fill(white) # draw logic draws the background and the sprite 
    gameDisplay.blit(spriteX,(lead_x,lead_y)) 
    pygame.display.update() 

    clock.tick(60) 

到精靈的方法是改變它在同一個地方,你改變你的速度(以事件代碼),然後在實際繪製場景時稍後使用更改後的精靈。

player_sprite = spriteX 

while not gameExit: 
    for event in pygame.event.get(): # event loop handles setting speed and the sprite 
     if event.type == pygame.QUIT: 
      gameExit = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       lead_x_change = -5 
       player_sprite = spriteX 
      if event.key == pygame.K_UP: 
       lead_y_change = -5 
       player_sprite = spriteY 

    lead_y += lead_y_change # update logic moves the position 
    lead_x += lead_x_change 

    gameDisplay.fill(white) # draw logic draws the background and the sprite 
    gameDisplay.blit(player_sprite,(lead_x,lead_y)) 
    pygame.display.update() 

    clock.tick(60) 

第二種方法是限制事件代碼,只需設置速度,再後來檢查已設置挑一個精靈繪製速度。

player_sprite = spriteX 

while not gameExit: 
    for event in pygame.event.get(): # event loop handles setting speed only 
     if event.type == pygame.QUIT: 
      gameExit = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       lead_x_change = -5 
      if event.key == pygame.K_UP: 
       lead_y_change = -5 

    lead_y += lead_y_change # update logic moves the position 
    lead_x += lead_x_change 

    if lead_y_change < 0: # set sprite based on speed 
     player_sprite = spriteY 
    else: 
     player_sprite = spriteX 

    gameDisplay.fill(white) # draw logic draws the background and the sprite 
    gameDisplay.blit(player_sprite,(lead_x,lead_y)) 
    pygame.display.update() 

    clock.tick(60) 

對於只有幾個不同的精靈非常簡單的邏輯,事件驅動子畫面的變化可能是最容易的。如果你想要動畫或其他更復雜的精靈變化行爲,第二種方法可能會更好,因爲你將能夠在一個地方處理所有的精靈邏輯。