我想在我的《太空入侵者》中为我的飞船制造炮弹。我认为现在唯一不起作用的是显示所有的投射物,因为我不知道怎么做,这就是为什么我尝试使用blit而没有起作用。我也想延迟每发子弹之间的时间,但我不知道如何做到这一点。 到目前为止,这是我做过的最先进的屏幕相关程序。你知道吗
import pygame
pygame.init()
class Player():
def __init__(self):
self.originalImage = pygame.image.load("ship.png")
self.image = self.originalImage
self.xposition = 480
self.yposition = 450
self.speed = 1
class Projectile():
def __init__(self):
self.originalImage = pygame.image.load("shot.png")
self.image = self.originalImage
self.xposition = player.xposition
self.yposition = player.yposition
self.speed = 1
size = width, height = 960, 540
screen = pygame.display.set_mode(size)
background = 0, 0, 0
player = Player()
projectile = Projectile()
projectiles = []
keys = pygame.key.get_pressed()
while True:
screen.fill(background)
for projectile in projectiles:
if projectile.yposition < height:
projectile.yposition -= projectile.speed
else:
projectiles.pop(projectiles.index(projectile))
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if (keys[pygame.K_RIGHT] or keys[pygame.K_d]) == True:
player.xposition += player.speed
if (keys[pygame.K_LEFT] or keys[pygame.K_a]) == True:
player.xposition -= player.speed
if (keys[pygame.K_SPACE] or keys[pygame.K_w] or keys[pygame.K_UP]) == True:
projectiles.append(projectile)
for projectile in projectiles:
screen.blit(projectile.image, (projectile.xposition, projectile.yposition))
screen.blit(player.image, ((player.xposition, player.yposition)))
pygame.display.flip()
我编辑了评论后的代码,但仍然没有移动。。。你知道吗
问题出在哪里:
没有任何东西在移动,因为
pygame.key.get_pressed()
在游戏循环之外,即只在启动时检查键的状态。每次拍摄时必须创建一个新的
Projectile
实例,否则只能拍摄一次。要使投射物正确地出现,你必须先闪动玩家精灵,然后闪动投射物,否则玩家精灵会覆盖它们。
若要在两次射击之间编写延迟代码,请将射击冷却时间存储在变量中(最好是
player
属性),您可以在每次射击时将其设置为某个正值,并在每个回合中递减。您使用
sys.exit()
,但尚未导入sys
,这会使您的游戏在退出时崩溃。或者,您可以raise SystemExit
,这与系统出口(),不需要任何导入。下面是更正的代码:
我建议使用^{} 。从} 在它超出边界时将其移动。e、 克:
Sprite
导出Projectile
。一个Sprite
应该具有.image
和.rect
属性。添加一个方法,该方法移动Projectile
并且^{创建^{} 以包含投射物:
Group
中的精灵可以由^{每当玩家发射子弹时,必须创建一个新的子弹实例并将其添加到子弹组中。我向我们推荐键盘事件:
密钥(} 控制:
keys = pygame.key.get_pressed()
)的状态必须在主应用程序循环中进行评估。应用程序的速度可以由^{相关问题 更多 >
编程相关推荐