Pygame中Projectile精灵无法显示的问题求助
Pygame中Projectile精灵无法显示的问题求助
我正在跟着入门教程学Pygame,但卡在了精灵显示这一步——我没法让Projectile精灵显示在屏幕上,下面是和这个精灵相关的代码,实在找不到哪里错了,有没有大佬能帮我看看?
我的精灵是Projectile,定义在Projectile类里,是玩家发射的,所以我加了launch_projectile方法,按道理在主循环里应该能显示这些发射物才对。
Projectile类
import pygame # Définir la classe projectile class Projectile(pygame.sprite.Sprite): # Définir le constructeur de la classe def __init__(self, player): super().__init__() self.velocity = 5 self.image = pygame.image.load('Assets\Blast.png') #self.image = pygame.transform.scale(self.image, (50, 50)) self.rect = self.image.get_rect() self.rect.x = player.rect.x + 100 self.rect.y = player.rect.y
Player类
import pygame from projectile import Projectile class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.health = 100 self.max_health = 100 self.attack = 10 self.velocity = 1 self.all_projectiles = pygame.sprite.Group() self.image = pygame.image.load('Assets\Flying_Raccoon.png') self.image = pygame.transform.scale(self.image, (100, 100)) self.rect = self.image.get_rect() self.rect.x = 0 self.rect.y = 0 # Créer un nouveau Projectile def launch_projectile(self): self.all_projectiles.add(Projectile(self)) ### Méthodes de déplacement (X / Y) ### def move_right(self): self.rect.x += self.velocity def move_left(self): self.rect.x -= self.velocity def move_up(self): self.rect.y -= self.velocity def move_down(self): self.rect.y += self.velocity
Game类
import pygame from player import Player class Game: def __init__(self): #Générer le joueur à la création du jeu self.player = Player() self.pressed = {}
Main文件
import pygame from game import Game pygame.init() pygame.display.set_caption("Pilot Raccoon") screen = pygame.display.set_mode((1080,720)) #Charger arrière plan background = pygame.image.load('Assets\Bg.jpg') #Charger le jeu game = Game() running = True #Boucle du jeu while running: #Mettre à jour l'écran pygame.display.flip() # Afficher le background screen.blit(background, (0, 0)) # Afficher le joueur screen.blit(game.player.image, game.player.rect) # Afficher les projectiles game.player.all_projectiles.draw(screen) # Déplacement du joueur if game.pressed.get(pygame.K_RIGHT) and game.player.rect.x + game.player.rect.width < screen.get_width(): game.player.move_right() elif game.pressed.get(pygame.K_LEFT) and game.player.rect.x > 0: game.player.move_left() elif game.pressed.get(pygame.K_UP) and game.player.rect.y > 0: game.player.move_up() elif game.pressed.get(pygame.K_DOWN) and game.player.rect.y + game.player.rect.height < screen.get_height(): game.player.move_down() for event in pygame.event.get(): # Evenement de fermeture de la fenêtre if event.type == pygame.QUIT: running = False # Détecter la touche enfoncée elif event.type == pygame.KEYDOWN: game.pressed[event.key] = True # Détecter si la touche espace est enfoncée if event.type == pygame.K_SPACE: game.player.launch_projectile() elif event.type == pygame.KEYUP: game.pressed[event.key] = False pygame.quit()
问题解决(EDIT 02)
后来我终于找到问题所在了!问题出在Main文件的按键判断逻辑里——检测空格键按下的条件写错了:
错误的代码片段:
# Détecter la touche enfoncée elif event.type == pygame.KEYDOWN: game.pressed[event.key] = True # Détecter si la touche espace est enfoncée if event.type == pygame.K_SPACE: game.player.launch_projectile()
这里把判断具体按键的event.key写成了event.type,导致永远触发不了发射精灵的逻辑!只需要把条件改成event.key == pygame.K_SPACE就正常了:
修正后的代码片段:
# Détecter la touche enfoncée elif event.type == pygame.KEYDOWN: game.pressed[event.key] = True # Détecter si la touche espace est enfoncée if event.key == pygame.K_SPACE: game.player.launch_projectile()
备注:内容来源于stack exchange,提问作者Macronaute




