【问题标题】:My sprite wont move right pygame我的精灵不会向右移动
【发布时间】:2012-05-12 18:30:44
【问题描述】:

早些时候,我的精灵根本不会移动,所以我发布了代码,并在大部分情况下修复了它,但现在我的向上/向下箭头工作正常,但我的右键不起作用。 (另外,当你按下两个键,然后放开一个键时,步行动画不起作用,但我现在并不急于解决这个问题。)我也不想使用用户制作的课程。提前致谢。 代码如下:

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)

【问题讨论】:

    标签: python pygame sprite


    【解决方案1】:

    在你的代码中它说:

    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
    

    这应该可以解决您的大部分问题...

    【讨论】:

      【解决方案2】:

      使用pressed = pygame.key.get_pressed() 获取当前按下的所有键的字典(实际上是一个元组,但按照事物的结构方式,您可以将其视为字典)。你会这样使用它:

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

      【讨论】:

        猜你喜欢
        • 2018-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 2013-11-14
        相关资源
        最近更新 更多