You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动