• Martes 12 de Noviembre de 2024, 20:52

Autor Tema:  Error  (Leído 2972 veces)

piyey

  • Miembro MUY activo
  • ***
  • Mensajes: 101
  • Nacionalidad: ni
    • Ver Perfil
    • Piyeycorp® - La imaginación es el límite
Error
« en: Viernes 24 de Junio de 2005, 18:25 »
0
Hola colegas...  :hola:

Eh... bueno, quisiera plantearles un problema que tengo... me estoy iniciando en el mundo de la programacion de videojuegos con allegro, asi que me baje un articulo de artebinario muy bueno en el que explica paso a paso la creacion de un juego en allegro... el problema es el siguiente...

En este articulo utilizan el compilador DJGPP con el RHIde, pero yo estoy trabajando con Dev-C++. Se supone que no hay ningun problema con esto... pero... en el codigo que el expone incluye la libreria list, y al compilar en Dev-c++ manda un error.

Me puse a revisar el codigo y es por una definicion de estructura, ya que en allegro definen BITMAP y en una libreria de este compilador tambien la definen...

Al hacer la prueba con solo estas lineas de codigo

Código: Text
  1. #include <allegro.h>
  2. #include <list>
  3.  
  4. int main()
  5. {
  6.     
  7. }
  8. END_OF_MAIN();
  9.  

notaremos que nos manda ese error, ya que list incluye a otra libreria, y esa otra libreria incluye a otra y aotra y a otra hasta que llega a una que tiene definido el BITMAP...

Ahora... ¿como puedo resolver este problema?... por el momento lo que hice es crear mis funciones de listas enlazadas e intentar modificar el codigo del articulo... pero se me ha dificultado un poco.

Esperando sus respuestas y agradeciendo de antemano me despido cordialmente...
See you!!! :hola:
piyey.
Si no vives para servir...
no sirves para vivir.


No soy el dueño del mundo...
pero si el hijo del dueño.


Entre la linea que divide la realidad de la ilusión...
se encuentra la imaginación

IlusionLand - Piyey

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Error
« Respuesta #1 en: Sábado 25 de Junio de 2005, 00:47 »
0
y para qvue necesitas incluir list?

quitalo no?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

piyey

  • Miembro MUY activo
  • ***
  • Mensajes: 101
  • Nacionalidad: ni
    • Ver Perfil
    • Piyeycorp® - La imaginación es el límite
Re: Error
« Respuesta #2 en: Lunes 27 de Junio de 2005, 22:54 »
0
Hola JuanK... :hola:

Pues resulta que eso es lo que estaba intentando hacer  <_< , ya que en el codigo de ejemplo que  brinda ese articulo utiliza las listas enlazadas  :blink: , entonces yo hice mis propias funciones de listas enlazadas  :rolleyes: ... por ahora ya resolvi ese problemita...

Pero ahora el problema es otro  :( ...

La logica de programacion esta super... es mas o menos asi:

se crea una clase Actor, de esta clase se deriban otras clases para los objeto, por ejemplo Nave, y estas heredaran los atributos de la clase Actor... pero para cada clase derivada se sobreescribiran algunos metodos, como draw, para que cada objeto dibuje lo que tenga que dibujar... ¿un poco complicado?... veamoslo en codigo


Código: Text
  1. class Actor
  2. {
  3.     public:
  4.             Actor();
  5.             ~Actor();
  6.             void set_image(BITMAP *bmp);
  7.             void draw(BITMAP *bmp);
  8.             ...
  9.  
  10.     protected:
  11.             int x;
  12.             int y;
  13.             BITMAP *imagen;
  14.             ...
  15. };
  16.  
  17. Actor::Actor()
  18. {
  19.  
  20. }
  21.  
  22. Actor::~Actor()
  23. {
  24.  
  25. }
  26.  
  27. void Actor::set_image(BITMAP *bmp)
  28. {
  29.     image=bmp;
  30. }
  31.  
  32. void Actor::draw(BITMAP *bmp)
  33. {
  34.     //aqui va el codigo para dibujar en bmp la imagen contenida en image
  35. }
  36.  
  37. class Nave : public Actor
  38. {
  39.     public:
  40.             Nave();
  41.             ~Nave();
  42.             void draw(BITMAP *bmp); //reescribimos el metodo draw
  43.             ...
  44.      protected:
  45.             int vy;
  46.             ...
  47. };
  48.  
  49. Nave::Nave()
  50. {
  51.     //codigo para constructor de Nave
  52. }
  53.  
  54. Nave::~Nave()
  55. {
  56.     //Codigo para destructor de Nave
  57. }
  58.  
  59. void Nave::draw(BITMAP *bmp)
  60. {
  61.     //Codigo para dibujar la imagen contenida en image hacia bmp
  62. }
  63.  
  64.  
  65.  

algo asi... esto es de lo que me acuerdo y un poco de la logica que se utiliza... luego de esto, se declara un objeto de tipo ActorManager, que es una clase que se encarga del control de todos los actores, este objeto tiene una lista (de aqui la lista enlazada) de todos los actores que se declaren en el juego, accesando a sus metodos draw para que se dibujen en un BITMAP uno por uno.

El problema es que cuando yo declaro un objeto de tipo Nave, por ejemplo, y lo agrego al administrador de actores (ActorManager) este lo almacena como un objeto de tipo Actor, por lo tanto el metodo grafico que utiliza es el de la clase Actor y no el metodo que se sobreescribio en la clase Nave...

no se si me di a entender :blink:  :unsure:  :blink: ... es un poco complicado para mi explicarlo :alien: ... si gustan pueden bajar este articulo desde Aqui

La logica esta super, a como lo habia dicho, pero no he podido ver los frutos de los cambios que le he hecho y acoplado a lo que proximamente sera mi juego...

no se porque lo de sobreescribir el metodo y almacenarlo no funciona... sera por que yo estoy trabajando con Dev-C++ y el en DJGPP-RHIde... no lo creo...

Gracias a todos por tomarse la molestia de leer este post, bajarse el articulo, leerlo, probarlo, comparar sus resultados con los mios y darme una respuesta a mi problemilla... je je je  :P

See you!!! :hola:
Piyey...
Si no vives para servir...
no sirves para vivir.


No soy el dueño del mundo...
pero si el hijo del dueño.


Entre la linea que divide la realidad de la ilusión...
se encuentra la imaginación

IlusionLand - Piyey

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Error
« Respuesta #3 en: Lunes 27 de Junio de 2005, 23:11 »
0
bueno ese es tu error, el metodo draw debe ser generico para todos los actores y si alguno debe hacer nua que otra cosita adicional que no se acople al metodo draw generico ues lo debe sobreescribir y sino lo debe extender..
extenderlo?
si llamar dentro del metodo draw de la nave al metodo draw de de la clase actor y seguidamente hacwerlo que sea propio de la nave.

Una version de implementacion  generaica de esto es por ejemplo:

Código: Text
  1.  
  2. class ActorGenerico
  3. {
  4.   ...
  5.  public virtual void Draw()
  6.  {
  7.      dibujar(miBmp, rectangulos[dibujoActual], rectanguloDestino);
  8.  }
  9.   ...
  10. }
  11.  
  12.  

Donde miBMp es el mapa de bits que contiene todos los cuadros de animacion, rectangulos es un array de objetos tipo rectangulo que contiene rectangulos donde ada uno de ellos delimita un area de mmi bmp de oriogen donde se encuentra lo que deseo dibujar, dibujoActual es un entero que me indica que rectangulo del array de rectangulos voy a dibujar y rectanguloDestino es el area de rectangulo donde dibujare en pantalla.

Asi que si nave hereda de ActorGenerico deberia funcionar sinm problemas y para animarla simplementa cambias el indice de reactangulo actual que vas a dibujar.

Ahora te diras bueno pero yo necesito dibuhar los disparos o el disparo de la nave, bien puedes hacer esto:

Código: Text
  1.  
  2. class Nave:ActorGenerico
  3. {
  4.    ...
  5.    public override void Draw
  6.   {
  7.       base.Draw();
  8.       DrawDisparo();
  9.   }
  10.    ...
  11.    public DrawDisparo()
  12.   {
  13.    ...
  14.    ...
  15.   }
  16. }
  17.  
  18.  

Los ejemplos son en psudocodigo parecedo a C#, busca sus equivalentes en C++;
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

piyey

  • Miembro MUY activo
  • ***
  • Mensajes: 101
  • Nacionalidad: ni
    • Ver Perfil
    • Piyeycorp® - La imaginación es el límite
Re: Error
« Respuesta #4 en: Martes 28 de Junio de 2005, 20:58 »
0
Je je je... Gracias JuanK por tu respuesta...  B)
ya lo resolvi... el problema era que en la clase base no habia declarado la funcion como virtual:

Código: Text
  1. virtual void draw(BITMAP *bmp);
  2.  

...solo busque en la ayuda de Turbo C++ sobre esa palabra clave y ahi explicaba que para poder sobreescribir una funcion de una clase base en una clase derivada tenia que declarar la funcion como virtual en la clase base... facil no? :D

Ah... y todavia no he llegado a lo de que la nave tenga varios dibujos   :unsure: ... ni lo de las balas  :blink:... pero segun veo creo que no me falta mucho  :D por el paso que llevo  :comp:

por el momento creo que es todo... pero no muy rapido amigo!!!... pronto volvere ja ja ja ja  :lol: ...

See you!!! :hola:
Piyey.
Si no vives para servir...
no sirves para vivir.


No soy el dueño del mundo...
pero si el hijo del dueño.


Entre la linea que divide la realidad de la ilusión...
se encuentra la imaginación

IlusionLand - Piyey

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Error
« Respuesta #5 en: Martes 28 de Junio de 2005, 21:02 »
0
mi recomendacion es que revices el metodo draw una vez hayas hecho lo de los multiples dibujos...
pues un mismo metodo draw de la clase actor deberia servir para cualquier actor, y sobreescribirlo solo seria necesario hacerlo muy raramente, lo mas comun sera extenderlo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

piyey

  • Miembro MUY activo
  • ***
  • Mensajes: 101
  • Nacionalidad: ni
    • Ver Perfil
    • Piyeycorp® - La imaginación es el límite
Re: Error
« Respuesta #6 en: Miércoles 29 de Junio de 2005, 01:35 »
0
El problema es que yo no se casi nada sobre esto de los videojuegos... bueno, mejor dicho nada... y me estoy guiando con el articulo que baje de artebinario... pero eso que puse anteriormente es el codigo que aparece al principio del articulo... despues hace algo mas o menos como lo que vos decis... y tambien declaran otras clase como ActorGraficable que son los actores que se dibujan en pantalla, unas clases para controlar los controles (jaja... valga la rebusnancia  :P )... y otras mas...

Pero lo que estoy haciendo, para no quedarme solo con lo que leo, es que con cada clase que presenta la utilizo con otros ejemplos que yo hago, las analizo bien para comprender bien su funcionamiento, y si hay algo que no me gusta como lo hace lo adecuo a mis nececidades...

Pero creo que en el futuro me servira mucho eso que me dijiste... muchisimas gracias...

P.D.: en el link que puse anteriormente solo aparece el juego sin el tutorial, pero en este link encontraras el tuto completo.

See you!!! :hola:
Piyey.
Si no vives para servir...
no sirves para vivir.


No soy el dueño del mundo...
pero si el hijo del dueño.


Entre la linea que divide la realidad de la ilusión...
se encuentra la imaginación

IlusionLand - Piyey