sábado, 31 de octubre de 2020

Moviendo Objetos por el Escenario

 Se muestra como hacer una clase objeto, que se complemente con todo lo anterior y se puedan mover objetos por el escenario.


Para entender bien lo que se va a realizar a continuación tenemos un video que muestra todo ello. En el video los objetos añadidos al escenario son 4: dos calabazas, un arbusto y unas flores.


En ejemplo tenemos dos objetos que no podemos mover, que son el arbusto y las flores. Y otros dos que si se pueden mover. Pero además el arbusto actúa como obstáculo.

Código de la clase Objetos

class Objetos
{
    int x, y;
    ALLEGRO_BITMAP* img;
    bool colisiona;
    int ancho, alto;
public:
    int getAncho() { return ancho; }
    int getAlto() { return alto; }
    int getX() { return x; }
    int getY() { return y; }
    void crea(ALLEGRO_BITMAP* i, int _x, int _y, bool c = false)
    {
        img = i;
        x = _x;
        y = _y;
        colisiona = c;
        ancho = al_get_bitmap_width(img);
        alto = al_get_bitmap_height(img);
    }
    void pinta()
    {
        al_draw_bitmap(img, x + globalx, y + globaly, 0);
    }
    bool comprueba()
    {
        if (colisiona)
        {
            int jx = jugador.getX();
            int jy = jugador.getY();
         
            if (jx + jugador.getTam() > x && jx < x + ancho && jy + jugador.getTam() > y  && jy < y + alto/2 )
            {
                return true;
            }
        }
        return false;
    }
    void posiciona(int _x, int _y)
    {
        x = _x;
        y = _y;
    }
    bool cerca(int _x, int _y)
    {
        return abs(x - _x) + abs(y - _y) < jugador.getTam() + 2 ;
    }
    void cambiaImagen(ALLEGRO_BITMAP* i)
    {
        img = i;
    }
};


La clase objetos podría ser una clase independiente, salvo que en este ejemplo concretamente no lo es debido a que se utilizan algunas variables externas a la clase. Concretamente tenemos las variables globalx y globaly que contiene la posición para el scroll de la pantalla. Además se utilizan llamadas a la clase player. Aunque todo esto se podría arreglar, pasando esos datos que se utilizan como parámetros.

La clase objeto cuenta con una imagen, la posición x,y, el ancho y alto de la imagen, y una variable de control llamada colisiona.

Tiene varios métodos para obtener los datos, que son: getX(), getY(), getAlto(), getAncho().

El método principal para inicializar la clase se llama crea, y necesita varios parámetros para crear el objeto, el primero es la imagen del objeto, lo siguiente la posición donde quieres que aparezca x,y. Y por ultimo un valor booleano que nos indica si el objeto colisiona o no. 

El método pinta muestra por pantalla la imagen en la posición indicada por x,y.

El método comprueba, se encarga de comprobar si colisiona el objeto con el jugador.

El método posiciona, le indica una nueva posición al objeto mediante los parámetros x,y.

La función cerca, devuelve true si la posición dada por los parámetros x,y esta cerca del objeto.

La función cambiaImagen, sirve para cambiar la imagen una vez creado el objeto.

Para quien quiera probar el código y trastear con el, lo dejo en el siguiente enlace.

Descarga el Código de ejemplo y las imágenes utilizadas.

No hay comentarios:

Publicar un comentario

Antes de publicar un comentario

Todos los comentarios que se realicen en el blog son moderados.

Debido a esto es muy probable que tu comentario no aparezca de inmediato ya que previamente debe ser revisado para evitar un mal uso (SPAM).

Podrán realizar comentario cualquiera que tenga una cuenta de Google.

Related Posts Plugin for WordPress, Blogger...