Febrero 20, 2015, 08:43:53 PM Ultima modificación: Febrero 20, 2015, 11:21:31 PM por kaliman777
Hola:
Necesito algún consejo para esto:

En un tablero tipo PACMAN tengo objetos diferenetes creados y en posiciones aleatorias. Al final de una alarma, algunos cambian de color y otros no.
Lo que quiero hacer es que los que tienen igual valor de Y, que sean sumados en una variable llamada global.row

¿Cuál es la mejor forma de escribir el código para hacerlo?
PD: Cuando el juego inicia borra los objetos anteriores que quedaban, por eso las IDs cambian con cada partida.

Gracias
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

Hola:
Un amigo me envió este código, pero aunque es simple, no lo entiendo muy bien cómo funka.
Alguien que me aclare!!!

Gracias

with (objects) marked=0;
with (objects) with (objects) {
    if (y=other.y) marked=1
}
global.row=0
with (objects) global.row+=marked;
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

#2 Febrero 20, 2015, 11:34:12 PM Ultima modificación: Febrero 20, 2015, 11:46:20 PM por penumbra
Se pueden  usar funciones, como instance_position(), que devuelve el id de la instancia basándose en un punto. "Si en la posición xxx, yyy existe una instancia del tipo zzz, haz tal cosa"
[gml]
var inst = instance_position(x, y, obj_padre_instancias)
if (inst != noone)
{
     //Ejecutar accion
}[/gml]
Si es un tablero, lo mejor sería meter el código de arriba en un juego de ciclos for anidados para recorrer el tablero tanto horizontal como verticalmente. El recorrido es igual al ejemplo del tablero bingo.

Otra opción es que al momento de crear las instancias, su posición se guarde en listas o mapas y luego usar esas listas/mapas para consultar las posiciones, si un objeto se elimina, se borra su posición de la lista/mapa, o al reiniciar partidas, limpiar la lista/mapa

Si sólo te interesa la posición Y, entonces se puede hacer[gml]
with(ob_padre_objetos)
{
     if (y == algo) //      no sé que criterio tengas en mente para comparar los valores de Y
     {
            //ejecutar acción
     }   
}[/gml]
En el código que pones, no le veo sentido a que haya una instrucción doble "with (objects) with (objects)"

Lo que hace ese código es que a todas las instancias del tipo "objetos" les limpia la variable "marked" (la iguala a 0). Luego, las instancias del tipo objects cuyo valor de (y) sea igual al (y) del objeto que ejecuta el código, se cambian a marked= 1. Luego la variable row se hace cero, y por último, row se usa como contador de cuántas instancias se marcaron (marked = 1).