<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Un cordial saludo a todos:<br>
        estoy siguiendo el curso de c++, y a la par estoy intentando
    crear un videojuego GRP multiplataforma, para ello me estoy ayudando
    por un libro de creación de videojuegos, (Programación de
    videojuegos con SDL para Windows y Linux. de Alberto García).<br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <a href="http://www.agserrano.com/publi.html">http://www.agserrano.com/publi.html</a><br>
    <br>
    Estoy tratando que el programa que incluirá el siguiente código
    cargue el juego a partir de documentos de texto plano, por lo que
    tendría que asignar la memoria de forma dinámica al no existir en el
    momento de complilar el numero especifico de elementos, según el
    autor del libro, La clase sdl_sprite está formada por un array de
    frames, pero en ningún momento veo que tenga una cantidad especifica
    de frames para el array.<br>
    ¿Esto significa que con el uso de OOP. puedo asignar la memoria en
    ejecución, sin complicarme la vida?<br>
    De momento estoy aun tratando de asimilar correctamente el tema de
    punteros y me he saltado muchos capítulos del curso para intentar
    comprender el tema de objetos clases y asignación de memoria
    dinámica... por lo que mi pregunta puede que sea muy estúpida, en
    tal caso pido disculpas de antemano, si alguien me podría explicar
    el "mecanismo" de este código estaría muy agradecido.<br>
    <br>
    el codigo es el siguiente:<br>
    <br>
    //Archivo de cabecera sdl_sprite.h<br>
    #ifndef SDL_SPRITE_H_INCLUDED<br>
    #define SDL_SPRITE_H_INCLUDED<br>
    <br>
    #define TRUE 1<br>
    #define FALSE 0<br>
    <br>
    // SDL_Frame representa un frame independiente de un sprite.<br>
    class SDL_Frame {<br>
        public: // accesible desde fuera de la clase<br>
            // variables de la clase<br>
            SDL_Surface *img; //superficie donde cargara la imagen del
    sprite<br>
            <br>
            // funciones de la clase<br>
            void carga(char *path); // para cargar un frame<br>
            void elimina(); // para eliminar<br>
    };<br>
    <br>
    // La clase sdl_sprite está formada por un array de frames;<br>
    class sdl_sprite {<br>
        private: // accesible unicamente desde la clase<br>
            int posx,posy; // coordenadas de posición<br>
            int estado; //punto en que se encuentra la animacion<br>
            int nframes; // numero total de frames de la animación<br>
            int cont; // contador para la animación<br>
        public:<br>
            SDL_Frame *sprite; <br>
            <br>
            sdl_sprite(int nf);<br>
            sdl_sprite();<br>
            void finaliza();<br>
            void AñadeFrame(SDL_Frame frame);<br>
            void SeleccionaFrame(int nf);<br>
            int frames() {<br>
            return cont;<br>
        }<br>
        void establece_x(int x) {<br>
            posx=x;<br>
        }<br>
        void establece_y(int y) {<br>
            posy=y;<br>
        }<br>
        void desplaza_x(int c) {<br>
            posx+=c;<br>
        }<br>
        void desplaza_y(int c) {<br>
            posy+=c;<br>
        }<br>
        int dame_x() {<br>
            return posx;<br>
        }<br>
        int dame_y() {<br>
            return posy;<br>
        }<br>
        int dame_w() {<br>
            return sprite[estado].img->w;<br>
        }<br>
        int dame_h() {<br>
            return sprite[estado].img->h;<br>
        }<br>
        void dibuja(SDL_Surface *superficie);<br>
        int colision(sdl_sprite sp);<br>
    };<br>
    <br>
    #endif // SDL_SPRITE_H_INCLUDED<br>
    <br>
    <br>
    //archivo de cod.fuente sdl_sprite.cpp<br>
    #include <SDL.h><br>
    #include <SDL_image.h><br>
    #include "sdl_sprite.h"<br>
    // Sprite Class implementation<br>
    void SDL_Frame::carga(char *path) {<br>
        img=IMG_Load(path);<br>
    }<br>
    <br>
    void SDL_Frame::elimina() {<br>
        SDL_FreeSurface(img);<br>
    }<br>
    <br>
    sdl_sprite::sdl_sprite(int nf) {<br>
        sprite=new SDL_Frame[nf];<br>
        nframes=nf;<br>
        cont=0;<br>
    }<br>
    <br>
    sdl_sprite::sdl_sprite() {<br>
        int<br>
        nf=1;<br>
        sprite=new SDL_Frame[nf];<br>
        nframes=nf;<br>
        cont=0;TRUE<br>
    }<br>
    <br>
    void sdl_sprite::finaliza() {<br>
        int i;<br>
        for (i=0 ; i<=nframes-1 ; i++)<br>
            sprite[i].elimina();<br>
    }<br>
    <br>
    void sdl_sprite::AñadeFrame(SDL_Frame frame) {<br>
        if (cont<nframes)<br>
        {<br>
            sprite[cont]=frame;<br>
            cont++;<br>
        }<br>
    }<br>
    <br>
    void sdl_sprite::SeleccionaFrame(int nf) {<br>
        if (nf<=nframes) {<br>
            estado=nf;<br>
        }<br>
    }<br>
    <br>
    void sdl_sprite::dibuja(SDL_Surface *superficie) {<br>
        SDL_Rect dest;<br>
        dest.x=posx;<br>
        dest.y=posy;<br>
        SDL_BlitSurface(sprite[estado].img,NULL,superficie,&dest);<br>
    }<br>
    <br>
    int sdl_sprite::colision(sdl_sprite sp) {<br>
        int w1,h1,w2,h2,x1,y1,x2,y2;<br>
        w1=dame_w();//ancho del sprite1<br>
        h1=dame_h();//altura del sprite1<br>
        w2=sp.dame_w();//ancho del sprite2<br>
        h2=sp.dame_h();//alto del sprite2<br>
        x1=dame_x();//pos. X del sprite1<br>
        y1=dame_y();//pos. Y del sprite1<br>
        x2=sp.dame_x();//pos. X del sprite2<br>
        y2=sp.dame_y(); //pos. Y del sprite2<br>
    <br>
        if
    (((x1+w1)>x2)&&((y1+h1)>y2)&&((x2+w2)>x1)&&((y2+h2)>y1))
    {<br>
            return TRUE;<br>
        } else {<br>
            return FALSE;<br>
        }<br>
    }<br>
    <a href="http://www.agserrano.com/publi.html"></a>
  </body>
</html>