Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Pequeño problema con IButton->SetFunction

Iniciado por Harko, 12 de Diciembre de 2011, 05:10:12 PM

« anterior - próximo »

Harko

Buenas Azazel, me he vuelto a poner a trastear con tu librería y tengo un pequeño problema con los botones. Estaba intentando asignarle una función a un botón pero no hay manera.

Estoy poniendo toda la parte gráfica (iniciación de la librería, carga de imágenes, redibujo, etc) en una clase aparte para poder manejarlo mejor y a la hora de asignar la función no lo admite.

Digamos que esta tal que asin:

void CRM32Inicializer::LoadButtons() {
IButton->SetLayer(0);
bPlay = IButton->Load(GFX_RESOURCE, "btnPlay");
IButton->SetPosition(bPlay, 480, 400);
IButton->SetFunction(bPlay,Play);
};


Y que la función Play es así:
void CRM32Inicializer::Play(void *iParam1, void *iParam2){
//Vacia por ahora
};

Le puse los dos valores porque parecen ser obligatorios.

La carga de imagen y la posición funciona sin problemas pero en el SetFunction me da error con la función diciendo:
Citarargument of type "void (CRM32Inicializer::*)(void *iParam1, void *iParam2)" is incompatible with parameter of type "void (*)(void *, void *)"

Cambiando Play por CRM32Inicializer::Play tampoco funciona, y this.Play igual.

He intentado solucionarlo usando un puntero a funciones, algo como:
void (*fptr)(void *,void *);
fptr = &CRM32Inicializer::Play;
IButton->SetFunction(bPlay,fptr);


SetFunction admite el puntero pero falla la segunda linea porque tampoco puede hacer la conversión. Trate de ponerle un (void *) pero me manda un poquito a la *****a y tal.

Ya no se que mas tocarle, al final pasare de todo y pondré que empiece pulsando una tecla --
-=Harko´s Blog=-
Fui el primer civil en probar el "Lord of Creatures" y ademas usaban mis cascos. :D

-=Portfolio=-

Alguno de mis juegos:
-=Feed The Frog=-

Neroncity

Harko

Al final he puesto la asignación de la función en main y así de paso aprovecho par ir poniendo ahí los cambios de estado. Con esto puedo ir tirando sin problemas.

Pero que solo puedas asignarle una función desde aquí y no desde dentro de una clase es bastante puñetero
-=Harko´s Blog=-
Fui el primer civil en probar el "Lord of Creatures" y ademas usaban mis cascos. :D

-=Portfolio=-

Alguno de mis juegos:
-=Feed The Frog=-

Neroncity

Warchief

Puedes asignarle la funcion desde donde quieras. El problema es que la funcion es de la forma:

void func(void*, void*);

y tu estas intentando asignarle un puntero a un miembro de una clase (metodo), en vez de una funcion global:

void TuClase::method(void*, void*);

La libreria no tiene una instancia de tu CRM32Inicializer sobre la que invocar el metodo, por lo que requiere una funcion global.

Esto deberia funcionar:

void Play(void *iParam1, void *iParam2){
//Vacia por ahora
};

void CRM32Inicializer::LoadButtons() {
IButton->SetLayer(0);
bPlay = IButton->Load(GFX_RESOURCE, "btnPlay");
IButton->SetPosition(bPlay, 480, 400);
IButton->SetFunction(bPlay,Play);
};



Harko

Correcto, me han comentado lo mismo hace un ratito.

La única diferencia seria añadir como primer parámetro un this para poder usar el resto de las funciones sin problemas.

Ale, una cosa menos de la que preocuparse :D
-=Harko´s Blog=-
Fui el primer civil en probar el "Lord of Creatures" y ademas usaban mis cascos. :D

-=Portfolio=-

Alguno de mis juegos:
-=Feed The Frog=-

Neroncity

TheAzazel

Veo que te han respondido antes que yo :) y ademas otro que no sabia nada de el desde hace mil!!! warchief!!! que fue de aquel bomberman? xD

Bueno, al menos duda resuelta jeje

Warchief

Lols.
Uhm, bomberman? No recuerdo haber estado haciendo nunca un bomberman, pero hace bastante que no hago proyectos en casa porque ya curro bastante en el curro, como para currar tambien despues :D






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.