Pygame: Создание маркеров - объект «Bullet» не вызывается - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь, чтобы pygame создавал новый объект Bullet при каждом нажатии мыши.Он работает с первым маркером, но на втором маркере появляется ошибка «Объект Bullet не вызывается».

class Bullet(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((20,40))
        self.image.fill(black)
        self.rect = self.image.get_rect()
        self.rect.x = player_1.rect.x
        self.rect.y = player_1.rect.y

        #self.image = pygame.image.load("C:/Users/Thomas/Desktop/rocket.png")
        self.width = self.image.get_width()
        self.height = self.image.get_height()
        self.speed = 20
        self.damage_radius = 0
        self.damage = 0
        self.angle = 0


    def draw(self):
        self.image.fill(black)
        screen.blit(self.image, (self.rect.x, self.rect.y))

    def delete(self):
        pass

    def fire(self, mouse):
        """Determine agnle of which rocket is fired"""
        pass

    def update(self):
        self.rect.y -= self.speed


def game_intro():
    intro = True
    while intro:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        screen.fill(intro_bg_color)
        large_text = pygame.font.Font("C:/Users/Thomas/Desktop/Python Sketches/Fonts/Quesat Black Demo.OTF", 100)


player_1 = Player((100,100), 20, blue)


while True:

    pygame.display.update()
    clock.tick(FPS)
    mouse = pygame.mouse.get_pos()
    gameEvent = pygame.event.get()

    """Draw"""

    """This wil be for advancing bullets in playing field"""

    screen.fill(bg_color)
    player_1.draw(mouse)

    for Bullet in bullet_list:
        Bullet.update()
        if Bullet.rect.y < 0:
            bullet_list.remove(Bullet)
        Bullet.draw()








    for event in gameEvent:
        if event.type == pygame.QUIT:
            pygame.quit()

        elif event.type == pygame.MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0]:
            mouse_is_pressed = True  # Used to determine if the mouse is held or not
            print("Mouse pressed")

            """Generate new bullet"""
            bullet = Bullet()
            all_sprites_list.add(bullet)
            bullet_list.add(bullet)
            bullet.rect.x = player_1.rect.x
            bullet.rect.y = player_1.rect.y

        elif event.type == pygame.MOUSEBUTTONUP and pygame.mouse.get_rel()[0]:
            mouse_is_pressed = False
            print("Mouse button released")

Когда нажата мышь, создайте новый Bullet, добавьте его в bullet_list.Ниже приведен пример, который я рассмотрел, и я просто не могу решить проблемы. Помощь очень ценится!

1 Ответ

0 голосов
/ 04 июня 2018

Я взял этот блок кода:

for Bullet in bullet_list:
    Bullet.update()
    Bullet.draw()

и изменил «Bullet» на «bullet», и код наконец-то начал работать.

for bullet in bullet_list:
    bullet.update()
    bullet.draw()
...