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))