代码之家  ›  专栏  ›  技术社区  ›  Macronaute

使用Pygame时Sprite未显示的问题[重复]

  •  -1
  • Macronaute  · 技术社区  · 6 月前

    我正在按照初学者教程开始使用pygame,但我被精灵显示卡住了。我无法在屏幕上显示它,请在下面找到与精灵相关的代码。

    我找不到我搞砸的地方,你知道吗?

    我的Sprite是“Projectile”,在Projectile类中定义,它是由玩家发送的,所以我添加了一个“launch_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
    

    玩家等级

    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
    

    游戏

    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()

    用完整代码编辑

    用答案编辑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()
    

    在上述情况下,“.type”应替换为“.key”:

        ...              
        # 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()
    
    1 回复  |  直到 6 月前
        1
  •  0
  •   Lukinator    6 月前

    在您使用的主文件中:

    if event.type == pygame.K_SPACE:
        game.player.launch_projectile()
    

    然而,“event.type”只是“pygame.KEYDOWN”,而不是“pygame.K_SPACE”。您应该使用“game.pressed.get(pygame.K_SPACE)”代替:

    if game.pressed.get(pygame.K_SPACE):
        game.player.launch_projectile()