Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





problemas con SetRenderCallback en una clase

Iniciado por glglut, 20 de Noviembre de 2007, 12:02:23 AM

« anterior - próximo »

glglut

hola!

estoy intentando programar clases que cada una muestre sprites diferentes y que el control de eventos de teclado esté controlada por cada una. tengo problemas cuando quiero hacer:

CRM32Pro.SetRenderCallback(RenderGraphics);

RenderGraphics es un método de una clase no es algo estático, por eso me sale este error:

error C3867: 'Clase2::RenderGraphics': function call missing argument list; use '&Clase2::RenderGraphics' to create a pointer to member

entonces pruebo a hacer lo que me dice de poner:

CRM32Pro.SetRenderCallback(&RenderGraphics);

y me da este error:

error C2276: '&' : illegal operation on bound member function expression   


alguna idea??

MUCHAS GRACIAS POR ADELANTADO :D

TheAzazel

Buenas!

te acabas de encontrar algo normal en C++ y es que no puedes saber la direccion de un miembro no estatico ya que se desconoce si el objeto de la clase fue creado o no y en que direccion esta.
Para conseguir que esto funcione puedes utilizar las siguientes lineas de codigo, es lo que yo he utilizado desde hace mucho tiempo, lo puedes adaptar a como mejor te venga e incluso hay algun otro metodo pero este me parece de lo mas sencillo de ver:

- Aqui tu clase portadora de RenderGraphics():

class cPortadorRG
{
public:
   void RenderGraphics(int);
int j;
};


- Ahora un par de lineas que hacen que todo funcione:

cPortadorRG *myObject;
void PortadorRG_RenderGraphics(int x)
{
myObject->RenderGraphics(x);
}


Me imagino que ya tendras algun puntero a tu clase portadora de RenderGraphics, por lo que puedes usarlo a el o hacer que myObject apunte a tu objecto. Despues, ya puedes hacer tranquilamente un:

CRM32Pro.SetRenderCallback(&PortadorRG_RenderGraphics);

Si quieres mas info sobre estas cosas, prueba a buscar en el google algo asi como c++ y pointer to member.

Ya me contaras! Saludos!

glglut

uyyy  a ver que creo que no me he enterado... yo lo que quería hacer es que cada objeto tuviera su propia función rendergraphics, pq cada objeto pintará en pantalla su lista de sprites, entonces si hago lo que dices como hago para pintar sprites que pertenecen a otro objeto?? o sea para explicarme mejor: tengo un objeto A que pinta 5 sprites y otro objeto B que pinta 2 sprites, inicialmente se pintan en pantalla los sprites del objeto A, entonces cuando le dé a una tecla quiero que deje de pintar estos 5 sprites y pinte los sprites del objeto B. entonces yo lo que quería era que cada objeto tuviera su rendergrapchis propia y que cada vez que uses un objeto hacer el setRenderCallback desde el mismo objeto que vas a usar... con lo que me has puesto funcionaría?? es que no veo como la clase cPortadorRG va a pintar sprites que están en otro objeto... :S perdón si no lo he entendido bien

TheAzazel

uff...eso es otra pelicula...

a ver, imagina que tienes dos grupos de sprites, grupo1 y grupo2, cada uno es una clase y tiene su propia funciona RenderGraphics(), en principio, si creas dos funciones wrapper(una para cada uno) y cambias de una a otra con CRM32Pro.SetRenderCallback() no habria ningun problema. Ahora bien, te en cuenta que con esa funcion tienes que dibujar todo el interfaz y demas, no solo los sprites de grupo1 y grupo2... yo lo que haria es un unico RenderGraphics() y que se ocupe de dibujar todo, con respecto al grupo1 o grupo2, puedes ponerlos una funcion de dibujado pero esta la llamaras desde la unica y central RenderGraphics() dependiendo de cual este activo.
De este modo yo lo veo mas organizado todo pero vamos, cuesiton de gustos!

Mejor ahora? jeje

glglut

jejeje sí ahora mejor gracias!! pues yo pensaba que quedaba mejor todo por separado pero claro tp tenía mucha idea :P, muchas gracias!! :D voy a implementar  :twisted:  :twisted:






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.