Вражеские снаряды не появляются на экране - PullRequest
0 голосов
/ 17 июня 2020

У меня есть сценарий, который нацелен на игрока, в каком бы положении он ни находился, но снаряды не отображаются на моем экране ВИДЕО . Он вообще не нападает, не знаю почему. Я нахожусь в основном l oop Я рисую пули.

класс пули моего врага

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

это идет на мой основной l oop, он добавляет пули и нацеливается на player

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

Я рисую пули, которые появляются на моем экране, но они не отображаются

            for shootss in shootsright:
                shootss.draw(window)

мой полный код скрипт

1 Ответ

0 голосов
/ 17 июня 2020

Я не запускал код, но думаю, что у вас неправильные отступы, и это создает проблему.

Вы добавляете к shootsright` внутри

  for shootss in shootsright:

      shootsright.append(...)

но при запуске shootsright пусто поэтому он никогда не запускается for shootss in shootsright: и никогда не запускается shootsright.append() - поэтому shootsright всегда пуст.

Вероятно, вам придется переместить его за пределы этого l oop (вы должны изменить отступы)

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

BTW: в следующий раз вы можете использовать print() во многих местах, чтобы увидеть значения в этом списке в разные моменты и увидеть, какая часть кода выполняется. Он называется "print debuging".

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...