所以我正在为我的计算课程中的一些课程做一个游戏,即将完成但是对于我的生活,我无法获得多个蜘蛛精灵在正确的位置产卵或在关卡之间正确重置。我之前尝试过向组添加不同的实例,但我总是会遇到与我尝试的每种方法不同的错误。代码在下面,对于pygame我是相当新的,所以对于凌乱的代码感到抱歉..
#class Spider(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load( 'Assets/Level-Assets/Level 1/Enemies/Spider_Down.png')
self.rect = self.image.get_rect()
self.Health = 3
self.Spawned = False
self.range = 100
self.Gravity= 6
self.pos_difference = 0
self.Active = False
self.Fall = False
self.Spiders = []
##################################################################################################################
def Set_Position(self):
if self.Spawned == False:
self.rect.center = (World.mapx, World.mapy)
Enemies.add(self)
self.Spawned = True
else:
self.rect.center = self.rect.center
######################################################################################################################
def update(self):
self.pos_difference = Player.rect.centery - self.rect.centery
if Player.rect.centerx >= self.rect.centerx -4 or Player.rect.centerx >= self.rect.centerx + 4:
if Player.rect.centery > self.rect.centery:
if self.pos_difference < 200:
self.Active = True
self.Fall = True
if self.Active == True:
if self.Fall == True:
self.rect.centery += self.Gravity
这是Spider的代码,它实际上没有做任何事情,直到在World类中调用它,我相信大部分问题都是......
def DisplayWorld(self):
self.MapLoad = False
for Row in range(len(self.newMap)):
for Col in range(len(self.newMap[Row])):
self.mapx = Col * 64
self.mapy = ((Row + self.Height_modifier) * 64)
self.tile_pos = (self.mapx, self.mapy )
if int(self.newMap[Row][Col]) == 1:
self.rect = self.Brick_Center.get_rect(left = (self.mapx) , bottom = (self.mapy))
self.World_sprites.add(World)
self.Camera_Pos_Check()
Player.Collision_Check()
Spider.Collision_Check()
Shoot.Collision_Check()
self.World_sprites.draw(screen)
elif int(self.newMap[Row][Col]) == 2:
Enemies.add(Spider(screen))
def main():
play = True
while play:
if pygame.key.get_pressed()[pygame.K_ESCAPE]:
play = False
if not Sprites.sprites():
Sprites.add(Player,Spider)
print(Sprites)
clock.tick(CLOCKRATE)
pygame.mouse.set_visible(False)
for event in pygame.event.get():
if event.type == pygame.QUIT:
play = False
screen.blit(bgi,(0,0))
screen.blit(bgi,(0,500))
World.findLevel()
Sprites.update()
Enemies.draw(screen)
Sprites.draw(screen)
if Shoot.bullet == True:
Shoot.update()
for b in range(len(Shoot.bullets)):
screen.blit(Shoot.image, (Shoot.bullets[b][0],Shoot.bullets[b][1]))
UI.Health_Display()
pygame.display.flip()
Sprites = pygame.sprite.Group()
Enemies = pygame.sprite.Group()
UI = User_Interface()
World = World()
Player = Proto()
Shoot = Shoot()
Portal = Portals()
Spider = Spider()
main()
答案 0 :(得分:1)
我发现了您的问题:您通过它的实例(Spider
)覆盖您的Spider()
类,然后给它指定相同的名称。因此,您一直在向敌人列表中添加相同的单个蜘蛛。相反,你应该删除文件底部的这个定义以及你添加(多个)蜘蛛的位置,你应该创建这个实例。
在一个更一般的评论中,使用全局变量和你一样广泛地被认为是糟糕的风格(而且性能不是太大)。在函数和类之间传递它们要好得多。此外,您用于所有变量的CamelCase
大小写通常仅用于类。我建议您查看pep8以了解有关如何使用常见Python样式的更多信息。它使这些问题更容易被发现,不太可能发生,并简化了所涉及的任何人的阅读。正确使用这些点可能会显着提高你的成绩;)。