我正和一些同学一起做一个小游戏,我想要一些关于如何处理这个问题的指导......
使用我的代码归结为我想要使用Boss_Shoot类,其中Boss类update()开始打印“应该正在拍摄”..看到的打印语句语句只不过是一个“占位符......
一如既往地非常感谢!
class Boss(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("sprites/boss.png")
self.rect = self.image.get_rect()
self.dx = 1
self.dy = 1
self.shoot= True
def update(self):
if self.rect.centerx >= 600:
self.rect.centerx -= self.dx
elif self.rect.centerx <= 600:
print "should be shooting"
self.rect.centery -= self.dy
self.checkBounds()
def checkBounds(self):
if self.rect.top <= 0:
self.dy *= -1
print
if self.rect.bottom >= 500:
self.dy *= -1
class Boss_Shoot(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((20, 20))
self.image.fill((255, 0, 0))
self.rect = self.image.get_rect()
self.rect.center = (320, 240)
self.dy =2
def update(self):
if self.shoot == True:
print "shooting"
for i in range(100):
print "wtf man"
self.rect.x = random.randrange(1000, 3000)
self.rect.y = random. randrange(10, 490)
self.rect.x -= 5
self.rect.y +=self.dy
答案 0 :(得分:1)
你需要一种方式,你的演员(或精灵,或任何你称之为&#34;实体&#34;)的方式可以与游戏的全局状态进行通信。
您没有显示所有代码,因此我假设所有内容都在一个文件中。
在代码的某处,你可能有一个所有演员的列表(如果你不这样做,你应该创建一个)。我们假设它被定义为:
actors = []
也许您使用单个列表,也许您想要使用pygame&#39; Group
类。
我进一步假设您在主循环中的所有actor上调用update()
方法,例如:
for a in actors:
a.update()
(或者,如果你使用pygame&#39; s Group
类,那就像mygroup.update()
)。
现在,在update()
的{{1}}方法中,只需创建Boss
的新实例,并将其添加到演员列表中,例如:
Boss_Shoot
您可能希望将def update(self):
if self.rect.centerx >= 600:
self.rect.centerx -= self.dx
elif self.rect.centerx <= 600:
actors.append(Boss_Shoot())
的位置传递给Boss
构造函数,以便子弹(或其他)不会随机出现在屏幕上(如果您愿意)。
我更喜欢将游戏状态封装成单独的Boss_Shoot
或dict
,然后将其传递给每个演员,以便每个演员可以注册/取消注册世界,例如:
class
你会明白这一点。