2012-05-12 158 views
1

早些時候,我的精靈根本不會移動,所以我發佈了代碼,我已經修復了大部分代碼,但現在我的上/下箭頭可以正常工作,但是我的右鍵不起作用。 (另外,當你按兩個鍵,然後放開一個鍵時,步行動畫不起作用,但我現在不急於修復)。另外,我不想使用用戶自定義的類。提前致謝。 下面是代碼:我的精靈不會右移pygame

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) 

回答

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=Truechange=False分別。然後檢查什麼按下和釋放的兩段後有添加這些行:

if len(key_pressed) > 0: 
    change = True 
else: 
    change = False 

這應該可以解決大部分的問題......

+0

謝謝,我甚至沒有注意到一種類型的代碼錯誤 – goomba

0

使用pressed = pygame.key.get_pressed()得到一本字典(元組,實際上,但是結構的方式可以把它看作是一本字典)所有當前按下的鍵。你會這樣使用它:

pressed = pygame.key.get_pressed() 
if pressed[K_LEFT]: 
    # move left 
elif pressed[K_RIGHT]: 
    # move right 
# etc