无法使精灵对角移动

0 投票
1 回答
1558 浏览
提问于 2025-04-18 18:34

我想用键盘让我的飞船在屏幕上对角移动,但每次尝试都不成功。我用w、s、a、d键单方向移动没有问题,但当我试着组合这些键时,就不行了。

为了单方向移动,我用的脚本是:

key = pygame.key.get_pressed()
if key[pygame.K_w]:

    classes.Ship.going_right = False
    ship.image = pygame.image.load('Images/myship3.png')
    ship.rect.y -= 8

elif key[pygame.K_s]:

    ship.image = pygame.image.load('Images/myship3.png')
    ship.image = pygame.transform.rotate(ship.image, 180)
    ship.rect.y += 8

elif key[pygame.K_a]:

    ship.image = pygame.image.load('Images/myship3.png')
    ship.image = pygame.transform.rotate(ship.image, 90)
    ship.rect.x -= 8


elif key[pygame.K_d]:

    ship.image = pygame.image.load('Images/myship3.png')
    ship.image = pygame.transform.rotate(ship.image, -90)
    ship.rect.x += 8

我尝试了好几种方法想让飞船同时向上和向右移动(按下'w'和'd'键),比如:

    elif key[pygame.K_w]:
        if key[pygame.K_d]:
            ship.image = pygame.image.load('Images/myship3.png')
            ship.image = pygame.transform.rotate(ship.image, -45)
            ship.rect.x += 8
            ship.rect.y -= 8

但是这个没反应,或者

    elif [key[pygame.K_w] + key[pygame.K_d]]:

    ship.image = pygame.image.load('Images/myship3.png')
    ship.image = pygame.transform.rotate(ship.image, -45)
    ship.rect.x += 8
    ship.rect.y -= 8

这个则是飞船自动对角向上和向右移动(根本不等我按键)。我已经想不出其他办法了。有什么建议吗?

1 个回答

4

如果你把elif放在if后面,那就不行了。你可以把第一个if改成:

if key[pygame.K_w]:
    if key[pygame.K_d]:
        ship.image = pygame.image.load('Images/myship3.png')
        ship.image = pygame.transform.rotate(ship.image, -45)
        ship.rect.x += 8
        ship.rect.y -= 8
    else:
        classes.Ship.going_right = False
        ship.image = pygame.image.load('Images/myship3.png')
        ship.rect.y -= 8

另外,我不太清楚pygame是怎么工作的,但每次移动船的时候都去读取图像文件似乎不是个好主意。这相当于每一帧都要从硬盘读取一次文件。也许你应该先读取一次,然后把它保存在一个变量里。

撰写回答