Python 敌人的炮弹不是';t在屏幕上追加

Python 敌人的炮弹不是';t在屏幕上追加,python,pygame,Python,Pygame,我这里有我的脚本,目标是球员,无论他在什么位置,但射弹没有显示在我的屏幕上。他根本没有进攻,我不知道为什么。我在我的主循环中,我把子弹引到它上面 我的敌人子弹课 # enemys bullets ksud = pygame.image.load("heart.png") class Boolss(object): def __init__(self, x, y,color, xspeed, yspeed): self

我这里有我的脚本,目标是球员,无论他在什么位置,但射弹没有显示在我的屏幕上。他根本没有进攻,我不知道为什么。我在我的主循环中,我把子弹引到它上面

我的敌人子弹课

    # enemys bullets
    ksud = pygame.image.load("heart.png")
    class Boolss(object):
       def __init__(self, x, y,color, xspeed, yspeed):
           self.x = x
           self.y = y
           self.xspeed = xspeed
           self.yspeed = yspeed
           self.ksud = pygame.image.load("heart.png")
           self.hitbox  = self.ksud.get_rect()
           self.rect  = self.ksud.get_rect()
           self.rect.topleft = (self.x,self.y)
           self.speed = 10
           self.color = color
           self.hitbox = (self.x + 57, self.y + 33, 29, 52) # NEW
       def draw(self, window):
            self.rect.topleft = (self.x,self.y)
            player_rect = self.ksud.get_rect(center = self.rect.center) 
            player_rect.centerx += 0 # 10 is just an example
            player_rect.centery += 0 # 15 is just an example
            window.blit(self.ksud, player_rect)
            self.hitbox = (self.x + 97, self.y + 33, 10, 10) # NEW
            window.blit(self.ksud,self.rect)
        

这在我的主循环中进行,它附加子弹并以玩家为目标

            for shootss in shootsright:
                
                shootss.x += shootss.xspeed
                shootss.y += shootss.yspeed
                if shootss.x > 500 or shootss.x < 0 or shootss.y > 500 or shootss.y < 0:
                    shootsright.pop(shootsright.index(shootss))


                if len(shootsright) < 2:
                    
                    start_x = round(enemyshoots1.x+enemyshoots1.width-107)
                    start_y = round(enemyshoots1.y + enemyshoots1.height-50)
                    target_x = playerman.x+playerman.width//2
                    target_y = playerman.y+playerman.width//2
                    dir_x, dir_y = target_x - start_x, target_y - start_y
                    distance = math.sqrt(dir_x**2 + dir_y**2)
                    if distance > 0:
                        shootsright.append(Boolss(start_x,start_y,(0,0,0),dir_x, dir_y))

我的完整代码

我没有运行代码,但我认为您的缩进错误,这导致了问题

您将附加到shootsright`inside

  for shootss in shootsright:

      shootsright.append(...)
但是在开始时,
shootsright
为空,因此它永远不会在shootsright:中为shootss运行
,也永远不会运行
shootsright.append()
-因此
shootsright
始终为空

可能您必须将其移出此循环(您必须更改缩进)

shootsright中shootss的
:
shootss.x+=shootss.xspeed
shootss.y+=shootss.y速度
如果shootss.x>500或shootss.x<0或shootss.y>500或shootss.y<0:
shootsright.pop(shootsright.index(shootss))
#外部` for`-循环
如果len(shootsright)<2:
开始x=圆形(敌人照片1.x+敌人照片1.width-107)
开始y=圆形(敌人射击1.y+敌人射击1.height-50)
target_x=playerman.x+playerman.width//2
target_y=playerman.y+playerman.width//2
dir_x,dir_y=目标_x-开始_x,目标_y-开始_y
距离=数学sqrt(方向x**2+方向y**2)
如果距离>0:
shootsright.append(Boolss(start_x,start_y,(0,0,0),dir_x,dir_y))


顺便说一句:下次您可以在许多地方使用
print()
,查看此列表中不同时刻的值,以及执行代码的哪一部分。它被称为
“打印调试”

在循环中在哪里使用
shootss.draw(窗口)
?您是否在
fill()
之后和
update()
之前执行此操作?您还可以使用
print()
查看这部分代码是否已执行-也许您在从未执行过的地方运行。顺便说一下:您可以使用
for
-循环加载图像-然后您可以将所有内容都放在一行中-即
self.rights=[pygame.image.load(“L{}.png.format(number)),用于范围(1,16)中的数字
可能首先在不同的位置检查打印(shootsright)
可能此列表为空。您可以创建
shootsright=[]
并且您在
中为shootsright:
中的shootss追加项目,但是如果
shootsright:
为空,则它将不会为shootsright:中的shootss执行
,因此它将不会运行
shootsright.append()。你的想法有点不对劲。或者您可能有错误的缩进,这部分代码应该在shootsright:
BTW中shootss的
之外:在Python中,从迭代列表
中删除项对于。。。在list:list.pop(…)
中,因为当您删除项时,其他项将在自由位置移动,但对于
不知道它,在下一个循环中,它跳过一个元素-这样它就不会检查它,并保留它应该删除的元素。更好的复制列表<代码>用于。。。在list.copy()中:list.pop(…)
  for shootss in shootsright:

      shootsright.append(...)
  for shootss in shootsright:

        shootss.x += shootss.xspeed
        shootss.y += shootss.yspeed
        if shootss.x > 500 or shootss.x < 0 or shootss.y > 500 or shootss.y < 0:
            shootsright.pop(shootsright.index(shootss))


  # outside `for`-loop

  if len(shootsright) < 2:

        start_x = round(enemyshoots1.x+enemyshoots1.width-107)
        start_y = round(enemyshoots1.y + enemyshoots1.height-50)
        target_x = playerman.x+playerman.width//2
        target_y = playerman.y+playerman.width//2
        dir_x, dir_y = target_x - start_x, target_y - start_y
        distance = math.sqrt(dir_x**2 + dir_y**2)
        if distance > 0:
            shootsright.append(Boolss(start_x,start_y,(0,0,0),dir_x, dir_y))