我试图在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()
老实说,我不知道为什么会发生这种情况,但任何帮助将不胜感激,因为我正在尝试为大学项目制作这个游戏,谢谢
看起来你的
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()
# ...