Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Efa games en Junio 23, 2011, 07:23:31 PM

Título: Problema con objectos persistentes
Publicado por: Efa games en Junio 23, 2011, 07:23:31 PM
Hola a todos, sigo haciendo el juego de Rayman :-[ Y ahora tengo un gran problema, si han jugado ha Rayman 2 sabr?n que hay unos lums que recolectar, que si los recolectas ya no vuelven a aparecer , ?no?

Pues bien yo quiero aplicar lo mismo a mi juego, que al coger el lum luego ya nno lo puedes volver  a coger. Eso es.

?AYUDA!
Título: Re: Problema con objectos persistentes
Publicado por: Mega G en Junio 23, 2011, 07:36:25 PM
Una soluci?n simple es que en el objeto del lum, al tocar al personaje salga el c?digo:

[gml]instance_destroy();[/gml]

Pero para que funcione la room tiene que ser persistente.


Si no te va bien, hay m?s maneras: puedes declarar una variable para cada lum, en un objeto al principio de todo del juego. Entonces cada vez que toques un lum, haces que la variable de ese lum pase de 0 a 1 por ejemplo.

As? en el evento <Step> de los lums, pones:

[gml]if global.existe_lum_23=1 { instance_destroy(); }[/gml]


Aunque puede parecer un poco larga esta manera, sobretodo al declarar las variables de cada lum.
Pero hay una soluci?n, puedes usar arrays.

Declara las variables de esta forma:


[gml]for(i=1; i<=numero_maximo_de_lums; i=i+1)
{
global.existe_lum=0;
}[/gml]


As? trabajas con global.existe_lum[23] (o el n?mero que sea).
Y evitas hacer esto, que ocupa mucho tiempo... y espacio en el disco:

[gml]global.existe_lum_1=0;
global.existe_lum_2=0;
global.existe_lum_3=0;
global.existe_lum_4=0;
global.existe_lum_5=0;
global.existe_lum_6=0;
global.existe_lum_7=0;

Etc.
[/gml]



Espero que te haya sido de ayuda!
Título: Re: Problema con objectos persistentes
Publicado por: Efa games en Junio 23, 2011, 07:48:53 PM
Cita de: Mega G en Junio 23, 2011, 07:36:25 PM
Una soluci?n simple es que en el objeto del lum, al tocar al personaje salga el c?digo:

[gml]instance_destroy();[/gml]

Pero para que funcione la room tiene que ser persistente.


Si no te va bien, hay m?s maneras: puedes declarar una variable para cada lum, en un objeto al principio de todo del juego. Entonces cada vez que toques un lum, haces que la variable de ese lum pase de 0 a 1 por ejemplo.

As? en el evento <Step> de los lums, pones:

[gml]if global.existe_lum_23=1 { instance_destroy(); }[/gml]


Aunque puede parecer un poco larga esta manera, sobretodo al declarar las variables de cada lum.
Pero hay una soluci?n, puedes usar arrays.

Declara las variables de esta forma:


[gml]for(i=1; i<=numero_maximo_de_lums; i=i+1)
{
global.existe_lum=0;
}[/gml]


As? trabajas con global.existe_lum[23] (o el n?mero que sea).
Y evitas hacer esto, que ocupa mucho tiempo... y espacio en el disco:

[gml]global.existe_lum_1=0;
global.existe_lum_2=0;
global.existe_lum_3=0;
global.existe_lum_4=0;
global.existe_lum_5=0;
global.existe_lum_6=0;
global.existe_lum_7=0;

Etc.
[/gml]



Espero que te haya sido de ayuda!
Pero es que si hago la room persistente, luego lo senemigos ya no aparecen y yo quiero que aparezcan al reiniciar el nivel...
La otra opcion no mola porque osn 1000 lums repartidos en varias rooms...
Por favor , ?Ayuda! :o
Título: Re: Problema con objectos persistentes
Publicado por: Wadk en Junio 23, 2011, 11:54:17 PM
Una forma muy f?cil es marcar el objeto como persistente y ponerle esto en create:
[gml]sroom = room;[/gml]
esto en room start:
[gml]visible = (room == sroom);[/gml]
y esto en step:
[gml]if (visible) {
    if (place_meeting(x, y, objPersonaje)) {
        // C?digo a ejecutar al obtener el objeto.
        visible = false;
        sroom = -1;
    }
}[/gml]

Puse un if adentro de otro en lugar de usar and para no malgastar tiempo de proceso haciendo la segunda comprobaci?n si la primera no se cumple.
Tambi?n pod?s probar a desactivar el objeto una vez obtenido, o directamente destru?rlo, pero no estoy seguro de si en esos casos se vuelve a crear.
Título: Re: Problema con objectos persistentes
Publicado por: brunoxzx en Junio 24, 2011, 01:39:53 AM
Cita de: Wadk en Junio 23, 2011, 11:54:17 PM
Puse un if adentro de otro en lugar de usar and para no malgastar tiempo de proceso haciendo la segunda comprobaci?n si la primera no se cumple.
Cre? que en gm si en un and el primer operando devuelve 0 ya no se tiene que chequear el otro, principalmente por esto que le?.

CitarWhen coding an if statement, watch out when using the && and || signs, because common languages like C++ use short-circuit evaluation. What this means is that if you e.g. do "if (A && B) {", B will only be checked if A is true. Therefore, consider checking things like variables first, and then things like math equations later. However, you might want to avoid long checks altogether.

Claro que dice que algunos lenguajes no usan ese m?todo pero pens? gm no estaba entre esos.
Título: Re: Problema con objectos persistentes
Publicado por: Efa games en Junio 24, 2011, 02:12:00 PM
Cita de: Wadk en Junio 23, 2011, 11:54:17 PM
Una forma muy f?cil es marcar el objeto como persistente y ponerle esto en create:
[gml]sroom = room;[/gml]
esto en room start:
[gml]visible = (room == sroom);[/gml]
y esto en step:
[gml]if (visible) {
   if (place_meeting(x, y, objPersonaje)) {
       // C?digo a ejecutar al obtener el objeto.
       visible = false;
       sroom = -1;
   }
}[/gml]

Puse un if adentro de otro en lugar de usar and para no malgastar tiempo de proceso haciendo la segunda comprobaci?n si la primera no se cumple.
Tambi?n pod?s probar a desactivar el objeto una vez obtenido, o directamente destru?rlo, pero no estoy seguro de si en esos casos se vuelve a crear.
Gracias, Wadk pero me pasa algo muy raro con lo que me has dicho, al hacerlo desaparecn pero entonces Rayman al chocar con ellos siendo invisible los vuelve a coger los lums...

EDIT:
Claro es que tu codigo los hace invisible, yo quiero que ya no aparezcan... ?No hay alguna manera?
Título: Re: Problema con objectos persistentes
Publicado por: Mega G en Junio 24, 2011, 09:28:52 PM
Aprovechando el c?digo de Wadk, pones en el evento <Step>:

[gml]if visible=0 { x=-100; y-=100; }[/gml]

O un instance_destroy(); o lo que te vaya mejor.

Saludos!
Título: Re: Problema con objectos persistentes
Publicado por: Wadk en Junio 24, 2011, 09:47:00 PM
Cita de: brunoxzx en Junio 24, 2011, 01:39:53 AM
Cita de: Wadk en Junio 23, 2011, 11:54:17 PM
Puse un if adentro de otro en lugar de usar and para no malgastar tiempo de proceso haciendo la segunda comprobaci?n si la primera no se cumple.
Cre? que en gm si en un and el primer operando devuelve 0 ya no se tiene que chequear el otro, principalmente por esto que le?.

CitarWhen coding an if statement, watch out when using the && and || signs, because common languages like C++ use short-circuit evaluation. What this means is that if you e.g. do "if (A && B) {", B will only be checked if A is true. Therefore, consider checking things like variables first, and then things like math equations later. However, you might want to avoid long checks altogether.

Claro que dice que algunos lenguajes no usan ese m?todo pero pens? gm no estaba entre esos.
S?, en otros lengajes es as?, pero en GM lo dudo la verdad. Habr?a que hacer la prueba.

@Efa games: Simplemente cheque? si son invisibles o no antes de tomarlos. Supongo que ten?s el c?digo en el evento de colisi?n de el personaje con el lum. En ese caso es cuesti?n de poner esto:
[gml]if (!other.visible) {
    exit;
}[/gml]
al principio.
Pero yo asum? que el c?digo estaba en el objeto lum.

Tambi?n fijate si funciona con instance_destroy() o instance_deactivate(), o sino pod?s hacer lo que dice Mega G.
Título: Re: Problema con objectos persistentes
Publicado por: brunoxzx en Junio 24, 2011, 11:24:43 PM
Tienes raz?n wadk gm no usa ese sistema, ya no entiendo ni de que me sirve usar ands  ???.
Título: Re: Problema con objectos persistentes
Publicado por: Wadk en Junio 25, 2011, 05:14:23 AM
Cita de: brunoxzx en Junio 24, 2011, 11:24:43 PM
Tienes raz?n wadk gm no usa ese sistema, ya no entiendo ni de que me sirve usar ands  ???.
?Hiciste la prueba?
Igual eso no significar?a que los ands son in?tiles XD.
Título: Re: Problema con objectos persistentes
Publicado por: brunoxzx en Junio 25, 2011, 05:24:16 AM
Si la hice y desde mi punto de vista actual son completamente in?tiles  XD, cuando termino un codigo generalmente lo optimizo y se hace incomprensible para un ser humano normal, ahora al optimizar tambi?n reemplazare todos mis ands por ifs.
Título: Re: Problema con objectos persistentes
Publicado por: Efa games en Junio 26, 2011, 02:29:42 PM
Solucionado, ?Gracais!
?Os pondre a todos en los creditos dle juego! :D