Hola queridos makeros! :)
He creado un objeto botón, el cual tiene 8 instancias (8 copias del objeto) que se crean en la habitación a través de otro objeto control. he logrado que cada instancia tenga un sprite diferente. todo eso con este codigo:
evento create del objeto control
var i,seleccion;
// botones
for (i = 0; i < 2; i += 1){
instance_create(x1+i*64,y,obj_pestanas)
}
for (i = 0; i < instance_number(obj_pestanas); i += 1){
seleccion[i] = instance_find(obj_pestanas, i);
}
seleccion[0].sprite=spr_infraestructura;
seleccion[1].sprite=spr_sector_primario;
ahí se crean solo 2 porque no las he terminado XD pero deben ser 8!
ahora lo que nos interesa,
necesito que al hacer click en una u otra instancia del botón sucedan cosas diferentes.
probé con el siguiente código, directamente en el obj_pestanas (el objeto botón), pero no me funciono.
evento mouse left pressed
if (seleccion[0])
{sucede algo}
if (seleccion[1])
{sucede otra cosa}
no se como decirle a la computadora que cuando haga click en una instancia u otra del mismo objeto sucedan cosas diferentes!
esa es la pregunta.
lo que yo haria seria aprovechar el codigo que hiciste para cambiar de sprite y que en el mismo prosceso le de una variable (algo así como objeto_id ) que al hacer click se haga una cosa o la otra segun el valor de esa variable.
o si no un if seleccion x , y lo que le quieras agregar, aunque dudo que funcione
PD: tu juego tiene que ver con ciencias sociales??
Cita de: ivn_eze en Agosto 20, 2014, 02:16:29 AM
lo que yo haria seria aprovechar el codigo que hiciste para cambiar de sprite y que en el mismo prosceso le de una variable (algo así como objeto_id ) que al hacer click se haga una cosa o la otra segun el valor de esa variable.
o si no un if seleccion x , y lo que le quieras agregar, aunque dudo que funcione
PD: tu juego tiene que ver con ciencias sociales??
si jaja se nota mucho? es como un trópico pero a mi estilo. ser presidente y esas parafernalias.
a este ritmo de preguntas, voy a tener que ponerlos a todos ustedes en los creditos jaja.
en cuanto a tu respuesta, no entendí bien lo que me quisiste decir, tengo los id de las instancias almacenadas en el array,
seleccion[0]=id de la primera instancia
seleccion[1]=id de la segunda instancia
... y así.
lo que necesito es que al hacer click sobre la instancia 1, pase algo y cuando se haga click sobre la instancia 2 pase otra cosa y así(aunque son todas instancias del mismo objeto).
como dije tengo los id de cada instancia, lo que no se es como llamarlas en un if para que cuando se clickeen suceda lo que yo quiero. 8)
hola amigo
bueno no es que sea un genio del codigo pero..
en este caso para lo que tu quieres puedes hacer lo siguiente
crea un script que haga lo que quieres dependiendo del sprite que usas ejemplo
if sprite_index="nombre sprite 1"
{que quieres que pase}
if sprite_index="nombre sprite 2"
{lo que quieres que pase}
luego llamas el script desde el evento leftclick o rightclick del objeto
otra cosa en el codigo donde creas los objetos, hay un vector en el que guardas la id del objeto creado pero si te fijas es un vector local osea si lo quieres llamar desde el objeto que creaste tendrias que poner objeto_control.seleccion[0] y ya con eso se arreglaria tu codigo aunque me parece un poco complicado hacerlo de ese modo
espero te sirva de ayuda
hasta pronto amigo
Cita de: masterkiu en Agosto 20, 2014, 04:28:34 AM
hola amigo
bueno no es que sea un genio del codigo pero..
en este caso para lo que tu quieres puedes hacer lo siguiente
crea un script que haga lo que quieres dependiendo del sprite que usas ejemplo
if sprite_index="nombre sprite 1"
{que quieres que pase}
if sprite_index="nombre sprite 2"
{lo que quieres que pase}
luego llamas el script desde el evento leftclick o rightclick del objeto
otra cosa en el codigo donde creas los objetos, hay un vector en el que guardas la id del objeto creado pero si te fijas es un vector local osea si lo quieres llamar desde el objeto que creaste tendrias que poner objeto_control.seleccion[0] y ya con eso se arreglaria tu codigo aunque me parece un poco complicado hacerlo de ese modo
espero te sirva de ayuda
hasta pronto amigo
muchas gracias amigo! por lo genio, ya somos dos jaja, he probado las dos opciones que me das y no he logrado nada, intenté varias cosas parecidas y nada.
la razón de ser tan complicado ademas de que lo disfruto jaja, es que los objetos están dibujados en el gui por que son botones del hud que van apareciendo si seleccionas otros botones, estoy haciendo un juego de estrategia política y los menús son lo mas importante del juego.
entonces no tienen image_index, ya que no les asigno sprite, los dibujo a través del evento draw gui por varias razones que ya están solucionadas.
probé llamar a las instancias como me dices con obj_control.seleccion[0] y nada.
como hago para decirle al programa que si hago click en la instancia seleccion[0] pase algo? y asi para cada sub indice del array
Esto:
if (seleccion[0])
{sucede algo}
if (seleccion[1])
{sucede otra cosa}
Nunca va a funcionar. No hay ninguna comparación contra la ID de la instancia que ejecuta el código. Suponiendo que las ids están guardades correctamente en el arreglo seleccion[]. Debería ser algo como (Evento de mouse)
[gml]switch (id)
{
case seleccion[0]: {//Cosas que sucenden cuando id es igual a seleccio[0] break; }
case seleccion[1]: { break;}
case seleccion[2]: { break;}
}[/gml]
o si no quieres usar un switch, se puede con ifs, pero es queda un poco menos limpio
[gml]
if id == seleccion[0]
{
//Acciones para cuando id == seleccion[0]
}
if id == seleccion[1]
{
//Acciones para cuando id == seleccion[1]
}
if id == seleccion[2]
{
//Acciones para cuando id == seleccion[2]
}[/gml]
Y se podría optimizar usando un sólo "for" para crear las instancias y obtener el "id":
[gml]
var i;
// botones
for (i = 0; i < 2; i += 1)
{
seleccion = instance_create(x1+i*64,y,obj_pestanas)
}
[/gml]
bueno amigo por lo que dices nunca te va a funcionar al hacer click
porque el evento click se activa al hacer click en la mascara(mask) del objeto,
y como tu solo usas el evento draw para dibujar un sprite este no tiene mask osea no importa que todos tengas sprites diferentes al hacer click le das al aire y por eso no se ejecuta la accion prueba a asignarle una mascara(mask) y has que el objeto este debajo del dibujo
porque si por ejemplo creas el objeto en x=0 y=0 y en draw pones draw_sprite(el_sprite,0,x+100,y+100,) tendrias que dar click en la pocicion x=0 y=0 para que se active el "evento click"(siempre y cuando tenga una mask asignada)
bueno espero que me entiendas
sino sigue preguntando para seguirte ayudando jejeje
hasta pronto
Deja simplemente 1 objeto, el cual crear 8 sprites (los 8 botones) y los dibuja en la pantalla (draw_sprite bla bla).
Bueno despues, para usarlos como "botones" simplemente puedes usar este codigo en un left click (o step marcando que se le pulsa).
if (mouse_x>view_xview[0]+X and mouse_x<view_xview[0]+X1+TAMAÑO and mouse_y>view_yview[0]+Y and mouse_y<view_yview[0]+Y+ALTURA and mouse_check_button(mb_left)) {
funciones del boton
}
X -> Me refiero a la X posicion donde se ha dibujado previamente el sprite.
TAMAÑO -> ANCHURA DEL SPRITE (ejemplo, 32x16 pues se usaria el 32)
Y -> Posicion Y
ALTURA -> Altura del sprite (ejemplo, 32x16 pues se usaria el 16)
Eso lo que haria basicamente es la funcion de que si presionas en esas coordenadas pase "algo", pero al estar dibujado en esa posicion el sprite del boton correspondiente pues simula el boton.
PD: Se mueve con la camara, por si acaso xD.
Hola a todos! muchas gracias por sus ideas ;D
la opción que presenta xizotono podría ser pero me parece mas ordenado utilizarlo con las id de las instancias, si no hay de otra ni modo, pero todavía no entiendo porque no me funciona.
probe lo que dice penumbra, tanto con if como con el ciclo switch y me tira error y no entiendo porque, he intentado eso cambiando la variable como, obj_obras.seleccion[0], obj_pestanas.seleccion[0], seleccion[0], id=seleccion[0], id_instance=seleccion[0] y nada!
me esta troleando la gente de yoyo games!
con el if sale como que no reconoce la variable y con el switch me dice que la variable debe ser constante, que me quieren decir?
PD:si le asigno una mask, pero es que en lo que hago click me tira un error y se me cierra el juego. >:(
Sube el proyecto para verlo. Así es más fácil ver dónde está el error. Si tienes errores de variable, es porque el código no está en el objeto correcto o no estás llamando correctamente a la variable. Dices que hay un error tal y otro error tal, pero no indicas exactamente que dice cada error. Es muy difícil adivinar
Listo! el proyecto esta en una fase muy primaria pero esta tomando forma, muchas gracias por todo! voy a tener que ponerlos en los créditos jaja
PD: los sprites son temporales para probar el codigo
Madre mía.... Tienes un montón de objetos que se podrían juntar en uno solo @_@
El error al usar el if o el switch se debe a que, en el objeto control (me costó encontrarlo, porque se llama "obras") estás declarando el arreglo seleccion en CREATE así:
[gml]var i,seleccion;[/gml]
Eso en GM se conoce como una declaración de variable local. Esa variable local sólo "dura con vida" en el evento donde se crea. Al finalizar create, la variable no existe más, por lo que es imposible acceder a ella, ni siquiera el mismo objeto obras puede hacerlo después de CREATE.
La solución es muy obvia así que no tiene caso decirla 8)
Cita de: penumbra en Agosto 23, 2014, 01:00:47 AM
Madre mía.... Tienes un montón de objetos que se podrían juntar en uno solo @_@
El error al usar el if o el switch se debe a que, en el objeto control (me costó encontrarlo, porque se llama "obras") estás declarando el arreglo seleccion en CREATE así:
[gml]var i,seleccion;[/gml]
Eso en GM se conoce como una declaración de variable local. Esa variable local sólo "dura con vida" en el evento donde se crea. Al finalizar create, la variable no existe más, por lo que es imposible acceder a ella, ni siquiera el mismo objeto obras puede hacerlo después de CREATE.
La solución es muy obvia así que no tiene caso decirla 8)
jaja :o
voy a montarte un templo, me declaro religión penumbra.
gracias amigo!!