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!
Visita www.arcadiatopupgame.es.tl registrate, los miembros tienen ventaja.
Y de paso juego al juego online:
http://www.comunidadgm.org/index.php?topic=12229.0

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!

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
Visita www.arcadiatopupgame.es.tl registrate, los miembros tienen ventaja.
Y de paso juego al juego online:
http://www.comunidadgm.org/index.php?topic=12229.0

#3 Junio 23, 2011, 11:54:17 PM Ultima modificación: Junio 23, 2011, 11:57:11 PM por Wadk
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.
Vim.

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.

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?
Visita www.arcadiatopupgame.es.tl registrate, los miembros tienen ventaja.
Y de paso juego al juego online:
http://www.comunidadgm.org/index.php?topic=12229.0

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!

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

Tienes raz?n wadk gm no usa ese sistema, ya no entiendo ni de que me sirve usar ands  ???.

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

#10 Junio 25, 2011, 05:24:16 AM Ultima modificación: Junio 25, 2011, 05:26:51 AM por brunoxzx
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.

Solucionado, ?Gracais!
?Os pondre a todos en los creditos dle juego! :D
Visita www.arcadiatopupgame.es.tl registrate, los miembros tienen ventaja.
Y de paso juego al juego online:
http://www.comunidadgm.org/index.php?topic=12229.0