无法使精灵对角移动
我想用键盘让我的飞船在屏幕上对角移动,但每次尝试都不成功。我用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是怎么工作的,但每次移动船的时候都去读取图像文件似乎不是个好主意。这相当于每一帧都要从硬盘读取一次文件。也许你应该先读取一次,然后把它保存在一个变量里。