Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Porque no aparece la imagen? Pygame
#1
Information 
Estoy probando la dimensión de la imagen del alien y luego ver cuantos caben horizontalmente en el eje x.

El libro me dice que por esta vez no es necesario un metodo blit, simplemente carga la imagen, le agrega un rectángulo, y en la clase principal del juego simplemente crea un método llamado: _create_fleet(self): crea una instancia de la clase Aliens, lo agrega a la instancia self.aliens, que es una lista que agrupa los sprites propiedad de pygame.
Luego en la (actualización de la pantalla; _update_screen) : el libro simplemente me indica que ponga  ( self.aliens.draw( self.screen) --> esto es la instancia de la lista con los aliens, y el método draw de pygame, como argumento le paso la pantalla, para que lo dibuje ahí... Pero no lo hace.

my code:

import pygame
from pygame.sprite import Sprite

class Alien(Sprite):
    """Una clase para representar un solo alien en la flota"""

    def __init__(self, ai_game):
        super().__init__()
        self.screen = ai_game.screen

        self.image = pygame.image.load('image/alien_violet.png')
        self.rect = self.image.get_rect()

        self.rect.x = self.rect.width
        self.rect.y = self.rect.height

        self.x = float(self.rect.x)

        def blitme(self):
        self.screen.blit(self.image, self.rect)


modulo alien_invasion.py resumido en el problema

self.aliens = pygame.sprite.Group()


    def run_game(self):
        while True:
            self._check_event()
            self.ship.update()
            self._update_bullet()
            self._update_screen()


def _create_fleet(self):
#instanciacion de la clase Aliens y se agrega el objeto a  la lista aliens...

        alien = Alien(self)
        self.aliens.add(alien)



    def _update_screen(self):
#Simplemente dibuja la nave en la pantalla, crei que no se podia usar draw con imagenes, si no solo brit, como con Ship... pero asi se muestra en el libro

        self.screen.fill(self.settings.bg_color)
        self.ship.blitme()
        for bullet in self.bullets.sprites():
            bullet.draw_bullet()
           
        self.aliens.draw(self.screen)
       
        pygame.display.flip()
Responder
#2
(23-02-2024, 02:51 AM)break_while1 escribió: Estoy probando la dimensión de la imagen del alien y luego ver cuantos caben horizontalmente en el eje x.
El libro me dice que por esta vez no es necesario un metodo blit, simplemente carga la imagen, le agrega un rectángulo, y en la clase principal del juego simplemente crea un método llamado: _create_fleet(self): crea una instancia de la clase Aliens, lo agrega a la instancia self.aliens, que es una lista que agrupa los sprites propiedad de pygame.
Luego en la (actualización de la pantalla; _update_screen) : el libro simplemente me indica que ponga  ( self.aliens.draw( self.screen) --> esto es la instancia de la lista con los aliens, y el método draw de pygame, como argumento le paso la pantalla, para que lo dibuje ahí... Pero no lo hace.
my code:
import pygame
from pygame.sprite import Sprite
class Alien(Sprite):
    """Una clase para representar un solo alien en la flota"""
    def __init__(self, ai_game):
        super().__init__()
        self.screen = ai_game.screen
        self.image = pygame.image.load('image/alien_violet.png')
        self.rect = self.image.get_rect()
        self.rect.x = self.rect.width
        self.rect.y = self.rect.height
        self.x = float(self.rect.x)
        def blitme(self):
        self.screen.blit(self.image, self.rect)
modulo alien_invasion.py resumido en el problema
self.aliens = pygame.sprite.Group()
    def run_game(self):
        while True:
            self._check_event()
            self.ship.update()
            self._update_bullet()
            self._update_screen()
def _create_fleet(self):
#instanciacion de la clase Aliens y se agrega el objeto a  la lista aliens...
        alien = Alien(self)
        self.aliens.add(alien)
    def _update_screen(self):
#Simplemente dibuja la nave en la pantalla, crei que no se podia usar draw con imagenes, si no solo brit, como con Ship... pero asi se muestra en el libro
        self.screen.fill(self.settings.bg_color)
        self.ship.blitme()
        for bullet in self.bullets.sprites():
            bullet.draw_bullet()
           
        self.aliens.draw(self.screen)
       
        pygame.display.flip()

Prueba esto.
Parece que hay un pequeño error en tu código relacionado con el método blitme en la clase Alien. La definición de este método debe estar fuera del método __init__ y también debe tener la sangría correcta. Aquí está la corrección:
Código:
import pygame
from pygame.sprite import Sprite
class Alien(Sprite):
    """Una clase para representar un solo alien en la flota"""
    def __init__(self, ai_game):
        super().__init__()
        self.screen = ai_game.screen
        self.image = pygame.image.load('image/alien_violet.png')
        self.rect = self.image.get_rect()
        self.rect.x = self.rect.width
        self.rect.y = self.rect.height
        self.x = float(self.rect.x)
    def blitme(self):
        self.screen.blit(self.image, self.rect)

demás, asegúrate de que el método blitme tenga la sangría correcta en tu código, ya que eso es crucial en Python. Después de realizar esta corrección, deberías ser capaz de ver los aliens en la pantalla cuando llamas al método self.aliens.draw(self.screen) en _update_screen.

Recuerda también verificar si las imágenes se están cargando correctamente y que las coordenadas de los aliens están dentro de los límites de la pantalla para asegurarte de que están siendo dibujados en una posición visible.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)