2012-05-12 74 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