在 pygame 中生成敌人

问题描述 投票:0回答:1

我试图在pygame中生成敌人,但它们会生成一毫秒,然后立即消失,但是当它们再次出现时,将会有一个额外的敌人(我想要的方式),但我需要敌人留在屏幕上并且不会消失。

import pygame 
import random
pygame.init()
pygame.display.init()

#screen ratios
screen_width = 1920
screen_height = 1080
fps = 60
fps_timer =  pygame.time.Clock()

screen = pygame.display.set_mode((screen_width, screen_height))

#colours
player_colour = (0, 134, 179)
main_enemy_colour = (255, 0, 0)
black = 000000
pygame.cursors.ball

#enemies
SPAWNENEMY = pygame.USEREVENT
enemies_list = []

#timer
spawn_duration = 2000
pygame.time.set_timer(SPAWNENEMY, spawn_duration)

#Player
class Player:

    def __init__(self):
        self.x = screen_width / 2
        self.y = screen_height / 2
        self.width = 50
        self.height = 50

        cursor = pygame.image.load("cursor.png")
        new_cursor = pygame.transform.scale(cursor, (16,16))
        self.cursor = new_cursor

        self.health = 8

    def draw_player(self, mouse_pos):
        rect_properties =  pygame.Rect([mouse_pos[0] - 25 + 8, mouse_pos[1] - 25 + 8, self.width, self.height])
        pygame.draw.rect(screen, player_colour, rect_properties)
    
    def player_cursor(self):
        pygame.mouse.set_visible(False)
        cursor = pygame.mouse.set_cursor(pygame.SYSTEM_CURSOR_CROSSHAIR)

        screen.blit(self.cursor, mouse_pos)


class Enemy():
    
    def __init__(self):
        self.width = 50
        self.height = 50

        self.xval = random.randint(0, 1920)
        self.yval = random.randint(0,1080)
        self.spawn_time = 2000
        self.spawn_rate = 1
        self.enemy_count = 0

        self.rect = pygame.Rect(self.xval, self.yval, self.width, self.height)
  
    def draw_enemy(self, screen):
        pygame.draw.rect(screen, main_enemy_colour, self.rect)

    def create_enemy(self):
        global enemies_list
        new_enemy = Enemy()
        enemies_list.append(new_enemy)


    
    

    def spawn_enemy(self):
        pass

player = Player()
enemy = Enemy()


game_loop = True
while game_loop == True:


    #mouse
    mouse_pos = pygame.mouse.get_pos()

    #events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_loop = False
        if event.type == SPAWNENEMY:
            Enemy().create_enemy()
            for new_enemy in enemies_list:
                Enemy().draw_enemy(screen)

    
    #actions
    player.draw_player(mouse_pos)
    player.player_cursor()

    
    
    pygame.display.update()
    fps_timer.tick(fps)
    
    screen.fill(black)


pygame.quit()

老实说,我不知道为什么会发生这种情况,但任何帮助将不胜感激,因为我正在尝试为大学项目制作这个游戏,谢谢

python pygame
1个回答
0
投票

看起来你的

for new_enemy in enemies_list: Enemy().draw_enemy(screen)
缩进得太远了。将其放在与
player.draw_player(mouse_pos)
相同的缩进处。否则,只会在生成事件发生的帧期间绘制敌人。

    # ...
    for new_enemy in enemies_list:
        Enemy().draw_enemy(screen)

    
    #actions
    player.draw_player(mouse_pos)
    player.player_cursor()
    # ...
© www.soinside.com 2019 - 2024. All rights reserved.