hola a todos, estoy intentando hacer que 4 o mas objetos iguales colisionen hagan un objeto diferente, lo que intente fue lo siguiente:
en el evento collicion del objeto puse al mismo objeto al colisionar en las accion puse variable collicion 4 o mas cambiar de spite. pero no me resulto ni se mosqueo.
como lo puedo hacer y en que objeto hirian las funciones.
para que me entiendan mejor, pongo el ejemplo del candy crush cuando juntas 4 o mas caramelos iguales se fusionan en un super caramelo, bueno como logro eso?.
Mira puedes crear un obj_control
En el create del ob_control:
global.fusion = 0
En el step del obj_control:
if global.fusion >= 3{instance_create( obj_caramelo.x,obj_caramelo.y,obj_caramelogigante);
global.fusion = 0;
with (obj_caramelo) instance_destroy();
}
En el obj_caramelo en la colision con otro obj_caramelo:
global.fusion += 1
No lo e probado pero tiene que ser algo asi si no te entendido mal.
Un saludo!
puse el tal cual me dijistes pero no pasa nada. probé cambiando los valores haber si asi pero se eliminan todos los objetos de dicha acción antes de empezar el juego. en mi mente paresia sencillo pero veo que ahora me e comprado un problema. si alguien sabe o tiene la solución se lo agradeseria
Cuando lo pusiste talcual te dije metiste el obj_control en el room? XD
si, lo puse en la room.
Alguna idea de como hacer que me funsione?. ahy alguna instansea o funsion que chequee que cuando hay 4 en linea cambie de sprite por otro?
:'( :'( :'( :'( :'( :'( :'( no me saleeee
No hay una función simple que pueda ayudarte, lo que quieres hacer es bastante complejo por la cantidad de casos que pueden darse. Toma en cuenta que no es adecuado utilizar el evento colisión para esto ya que las piezas no necesariamente tienen que colisionar para formar una línea (por ejemplo cuando se forma una línea horizontal). Te sugiero como idea que crees una función recursiva que analice, para una pieza dada, todas las piezas que están adyacentes a ella, incrementando un contador cada vez que encuentre una pieza contigua del mismo tipo en la misma fila o columna.
(http://i62.tinypic.com/ej5v8n.png)
Segun la imagen hay 4 casos posibles para comprobar si hay una linea de 4 piezas juntas. Una forma de hacerlo es ir viendo caso por caso usando funciones que tra el el programa como por ejemplo instance_position(x,y,obj). Para el primer caso hay que ver si hay 3 piezas a la derecha:
act=false ////es una variable para comprobar si se cumple al menos uno de los casos
sw=sprite_width ////el ancho del sprite (solo para hacer mas corto el codigo)
sh=sprite_height ////el largo del sprite (solo para hacer mas corto el codigo)
if instance_position(x+sw+sw/2,y+sh/2,pieza) and instance_position(x+sw*2+sw/2,y+sh/2,pieza) and instance_position(x+sw*3+sw/2,y+sh/2,pieza) {act=true} ////pieza es el nombre del objeto
if act=true {"lo que quieras que pase como que se destruya la pieza"} ////esta parte iria a lo ultimo despues de comprobar los 4 casos
El codigo x+sw+sw/2,y+sh/2 lo que hace es solo buscar el centro del sprite.
entiendo lo que hacen esas funciones y todo pero no entiendo porque no pasa nada, lo pongo bien, cree un objeto lo coloque en la room le puse en el evento create tu codigo modificandole el objeto a afectar, pero nada. (después lo que hice fue poner el codigo directo en el objeto mismo pero tampoco, luego lo puse en el scripts que se encarga de posicionar los objetos en la room y nada= ambos casos me producen un error= opar_box-draw-sl_1). el juego que utilise de base para hacer el mio lo saque de esta pagina se llama match_3_engine. de seguro lo conocen bien
Sin subir el ejemplo de lo que tenes echo es imposible saber donde esta el error. O podes empezar desde cero sin usar el ejemplo de match_3_engine
perdon por la demora, este es el juego que quiero que al hacer 4 o mas del mismo color cambie por un solo objeto distinto, es de GM 8. es exactamente lo mismo que mi proyecto, el mio no lo puedo subir porque no esta terminado, pero igual es lo mismo no le cambie nada.
gracias por responder
Cita de: zangetsu en Junio 30, 2014, 02:00:10 AM
perdon por la demora, este es el juego que quiero que al hacer 4 o mas del mismo color cambie por un solo objeto distinto, es de GM 8. es exactamente lo mismo que mi proyecto, el mio no lo puedo subir porque no esta terminado, pero igual es lo mismo no le cambie nada.
gracias por responder
Pues a mí al intentar ejecutar el proyecto me da el siguiente error:
In Room rEngine, Room Creation Code, at line 1: Unknown function or script: show_infoY no tengo ni idea de donde se produce...
el juego es de Game Maker 8, lo abriste con ese?
He hecho un ejemplo sencillo y parece que funciona. Sólo consiste en la funcionalidad básica de detectar los cuatro objetos en línea (horizontal, vertical y diagonales) y gurdar sus id en una ds_list. Tú tendrías que adaptarlo a tu juego porque no he implementado detalles como qué pasa cuando se detectan los cuatro objetos, y también una vez que hagas lo que sea con esos 4 objetos, quedaría pendiente borrarlos de la ds_list.
Tutorial explicando la idea y proyecto .gmz:
http://www.inventati.org/estupidezartificial/web/papers/linea.html (http://www.inventati.org/estupidezartificial/web/papers/linea.html)