Moviendo un Objeto en Pygame

Moviendo un Objeto en Pygame


Moviendo un Objeto en Pygame


Continuando con el proceso de explicación del código de cómo realizar un juego de Ping Pong, en este tutorial les voy a explicar cómo mover un objeto en pygame, voy a provechar el ejemplo del anterior tutorial para la explicación, este proceso, bueno para este ejemplo las teclas que usaremos las flechas del teclado, para mover nuestra pelota.

Clase Pelota


class pelota(pygame.sprite.Sprite, pygame.font.Font):
    
    def __init__(self):
        
        pygame.sprite.Sprite.__init__(self)
        self.image=cargar_img('/home/mikey/Documentos/Mov Pygame/pelota.png')
        self.rect = self.image.get_rect()
        self.rect.center = (300,200)

    def update(self):

            keys = pygame.key.get_pressed()
            
            if keys[K_DOWN]:

                self.rect.y += 6

                if self.rect.y>=415:

                    self.rect.y -= 6

            if keys[K_UP]:

                self.rect.y -= 6

                if self.rect.y <=18:

                    self.rect.y += 6

            if keys[K_RIGHT]:

                self.rect.x += 6

                if self.rect.x>=522:

                    self.rect.x -= 6

            if keys[K_LEFT]:

            self.rect.x -= 6

            if self.rect.x<=47:
            
            self.rect.x += 6


Esta es la clase que permite mover la pelota por la pantalla de pygame, bueno lo primero que se hace es iniciar, el sistema de Sprite, Un sprite es todo aquello que está en el juego ya sea (jugador, héroe, objeto .etc) en pygame se acostumbra crear una clase ‘class’ para cada sprite en este caso crearemos la clase pelota.

Creamos la clase pelota heredando en método sprite de pygame class pelota(pygame.sprite.Sprite), creamos un metodo de inicializacion def __init__(self) en el cual inicializamos el método sprite de pygame pygame.sprite.Sprite.__init__(self) ,cargamos la imagen usando la función cargar_img() que vimos anteriormente seguido capturamos el rectángulo de la imagen cargada self.rect = self.image.get_rect() y le damos una posición donde aparecerá nuestro objeto self.rect.center = (300,200)

Luego definimos una función update, donde crearemos las variable que nos permitirá la captura de las teclas.

keys = pygame.key.get_pressed()


En este caso la variable keys tomara el valor de pygam.key.get_pressed(), esta es la función de paygame que permite capturar cuando presionamos una tecla.

Lo que sigue a continuación es definir las teclas que deseamos manejar para mover nuestra pelota, para este ejemplo, voy a manejar las flechas del teclado.




If keys[K_DOWN]:

                self.rect.y += 6

                if self.rect.y>=415:

                    self.rect.y -= 6


Bueno después de capturar la tecla que se presiona en nuestra variable, usamos un if para preguntar qué tecla es si esta corresponde como en este caso a la tecla de la flecha abajo o [K_DOWN], la pelota se moverá 6 puntos hacia abajo, suena algo contradictorio porque estamos sumando esos seis puntos pero recordemos el grafico de nuestros ejes en la venta de pygame.

PLANO CORDENADAS PYGAME

pygame


Observamos como al aumenta el valor de la variable y de nuestra peloto en realidad estamos descendiendo, por ultimo colocamos una restricción para que nuestra pelota no descienda mas en este caso le decimos que solo llegue a tener un valor de 415 y al llegar a este valor le restamos seis puntos lo que bloquea a la pelota, si no se realizara esto la pelota continuaría descendiendo sin ningún limite.


            if keys[K_UP]:

                self.rect.y -= 6

                if self.rect.y <=18:

                    self.rect.y += 6

Para subir nuestra pelota realizamos los mismos paso que para descender las únicas diferencias son que capturamos la flecha hacia arriba del teclado, y en vez de sumar 6 puntos le restamos los mismos 6 puntos para que suba por nuestro plano y al momento de llegar al límite permitido en este caso 18 se le suman seis puntos lo que no permite que la pela continúe ascendiendo por la venta.

Para que nuestra pelota se mueva de izquierda a derecha el proceso es muy similar lo único que cambia son las flechas a capturar y que en ves de sumar o restar los 6 puntos en el eje Y se lo hace en el eje X


            if keys[K_RIGHT]:

                self.rect.x += 6

                if self.rect.x>=522:

                    self.rect.x -= 6

            if keys[K_LEFT]:

            self.rect.x -= 6

            if self.rect.x<=47:
            
            self.rect.x += 6



Y al igual que en el ejemplo del eje Y colocamos limites para que nuestra pelota no se salga de la venta.

Ahora cabe aclarar ciertas cosas lo primero es saber los nombres de las letras para poderlas a usar al final del tutorial colocare una lista de las letras, y segundo aclarar la suma de los valores para mover nuestra objeto, bueno entre mayor sea el numero nuestro objeto se moverá de manera mas rápida, pero esto le restara precisión y si el valor es muy pequeño la velocidad de movimiento se reduce pero aumenta la precisión como este se mueve.


python


Además si presionamos dos teclas a la vez el objeto se moverá de manera diagonal, en el grafico se observa el movimiento de un objeto dentro de la ventana de pygam, lo único es que tome que el parte desde una posición [0,0] pero como ya explique esto no es así el en realidad parte desde un punto [X,Y], en nuestro caso [300,200], lo hice para aclarar de una manera mas matemática el movimiento del objeto. Y que se entienda como sucede el movimiento combinado de nuestra pelota cuando se presionan dos teclas,


Bueno esta es la explicación de como se mueve una pelota en pygame, y como realiza su movimiento a través de la venta de pygame espero que les sea de utilidad.


Realizado por

Mikey



Comunidad




Dentro de la comunidad este el todo este manual en PDF ademas del código fuente del juego con todos sus elementos

Primer Juego Pygame


4 comentarios - Moviendo un Objeto en Pygame

@Allowski
gracias por tus aportes sigue así +10, a favs y recomendado!
@nicobari
deberias completar el codigo con el constructor y el llamado.. si no queda a medias... por lo demas buenisimo!!