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?.


#1 Junio 23, 2014, 09:37:55 AM Ultima modificación: Junio 23, 2014, 11:21:08 PM por Cerez0
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

#4 Junio 24, 2014, 01:44:54 AM Ultima modificación: Junio 24, 2014, 05:53:09 AM por zangetsu
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 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.



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_info

Y no tengo ni idea de donde se produce...

el juego es de Game Maker 8, lo abriste con ese?

#14 Julio 02, 2014, 09:44:10 PM Ultima modificación: Julio 02, 2014, 11:17:44 PM por penumbra
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