如何在Pygame中按指定条件生成实体?敌人Y轴达300px时生成新敌人
问题解决方案
核心修改逻辑
要实现敌人自动生成的效果,需要对原有代码做以下调整:
- 用列表存储所有敌人的坐标,替代原有的单个
enemyX、enemyY变量,支持同时存在多个敌人 - 每次主循环检查最新生成的敌人Y坐标是否达到300px,满足条件就往列表新增一个初始位置的敌人
- 修复原有代码中画布对象的作用域错误,保证代码可以正常运行
- 将图片加载逻辑移到主循环外,避免反复加载资源拖慢运行性能
完整修改后代码
import pygame import random pygame.init() screen_width = 800 screen_height = int(screen_width * 0.8) def create_canvas(): canvas = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("Space Invaders") icon = pygame.image.load("/Users/yashas/Desktop/python_projects/SpaceInvaders/Images/icon.png") pygame.display.set_icon(icon) return canvas # 提前加载所有图片资源 playerImg = pygame.image.load("/Users/yashas/Desktop/python_projects/SpaceInvaders/Images/player.png") enemyImg = pygame.image.load("/Users/yashas/Desktop/python_projects/SpaceInvaders/Images/enemy.png") enemyImg = pygame.transform.rotozoom(enemyImg, 180, 1) # 玩家参数 playerX = (screen_width / 2) - 35 playerY = screen_height - 100 playerSpeedX = 0 # 敌人参数 enemySpeed = 0.4 enemies = [] # 生成第一个初始敌人 enemies.append([random.randint(0, 736), screen_height - (screen_height + 70)]) def draw_player(canvas): canvas.blit(playerImg, (playerX, playerY)) def draw_enemy(canvas, enemy_coord): canvas.blit(enemyImg, (enemy_coord[0], enemy_coord[1])) if __name__ == "__main__": canvas = create_canvas() while True: canvas.fill((0, 0, 40)) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() if event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT: playerSpeedX = -0.7 if event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT: playerSpeedX = 0.7 # 玩家边界判断 if playerX <= 0: playerX = 0 elif playerX >= 736: playerX = 736 playerX += playerSpeedX # 更新所有敌人位置 for e in enemies: e[1] += enemySpeed # 检查是否需要生成新敌人 if enemies[-1][1] >= 300: new_enemy_x = random.randint(0, 736) new_enemy_y = screen_height - (screen_height + 70) enemies.append([new_enemy_x, new_enemy_y]) # 渲染所有元素 draw_player(canvas) for e in enemies: draw_enemy(canvas, e) pygame.display.update()
内容的提问来源于stack exchange,提问作者FatTony
相关产品推荐
相关产品推荐

