Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - Wadk

226
Cita de: Ciberman en Julio 21, 2011, 08:26:38 PM
estas haciendo lo mismo que se hace con las listas de mi metodo pero manualmente usando arrays.

el problema de eso es que al no duplicar la lista, en el momento que se acabe la lista dar?a error, si se duplicara la lista se podr?a volver a resetear.
Hmmm... seguro que eso se puede arreglar tambi?n ;).

Create:
[gml]choosen = -1;
name[0] = "foo";
name[1] = "bar";
names = 2;
cnames = names;[/gml]

Step:
[gml]if (cnames == 1) {
    cnames = names;
    choosen = -1;
}
if (choosen != -1) {
    var tmp;
    cnames -= 1;
    tmp = name[choosen];
    name[choosen] = name[cnames];
    name[cnames] = tmp;
}
choosen = floor(random(cnames));[/gml]

Draw:
[gml]if (choosen == -1) {
    draw_text(10, 10, "No hay un nombre elejido a?n.");
} else {
    draw_text(10, 10, "Nombre: " + name[choosen] + ".");
}
if (cnames == 1) {
    draw_text(10, 26, "Este es el ?ltimo nombre. Presiona Enter para reiniciar la lista.");
}[/gml]
227
Cita de: Ciberman en Julio 21, 2011, 03:49:54 AM
ojo, estas diciendo que quieres que las palabras no se repitan, con ambos metodos las palabras podr?an repetirse.
Se me pas? eso :S.
El ejemplo que puse antes tambi?n se puede modificar para que las palabras no se repitan.
Solo hay que cambiar el c?digo de Key Press Enter por este:
[gml]if (choosen != -1) {
    names -= 1;
    name[choosen] = name[names];
}
choosen = floor(random(names));[/gml]
Eso deber?a ser suficiente.

Me parace mucho m?s sencillo que el m?todo que plantea Ciberman.
228
Usando el ejemplo de Zeit...

Pon? los siguientes c?digos en un objeto:
Create:
[gml]choosen = -1;
name[0] = "foo";
name[1] = "bar";
names = 2;[/gml]

Key Press Enter:
[gml]choosen = floor(random(names));[/gml]

Draw:
[gml]if (choosen == -1) {
    draw_text(10, 10, "No hay un nombre elejido a?n.");
} else {
    draw_text(10, 10, "Nombre: " + name[choosen] + ".");
}[/gml]

Para modificar los nombres ten?s que modificar el evento create. Por ejemplo, al agregar uno:
[gml]choosen = -1;
name[0] = "foo";
name[1] = "bar";
name[2] = "baz";
names = 3;  // Ese n?mero es el total de nombres.[/gml]
229
Preguntas y respuestas / Re: Cambiar name
Julio 20, 2011, 07:41:12 PM
Prob? lo que te sugiere MaanuRP. Tambi?n, ?es el room del problema el primero en la lista de rooms? si no lo es, fijate qu? hay en los rooms anteriores. Esto ya es un tanto agarrado por los pelos, pero puede que un objeto persistente sea el que cambie el caption.
230
Aunque el ejemplo de MaanuRP es m?s sencillo de implementar, hay que notar que est? limitado a 16 palabras. Para m?s palabras hay que usar un formato espec?fico o el resultado no ser?a del todo balanceado.
El ejemplo de Zeit tiene un l?mite de, si no recuerdo mal, 32.000 palabras.
231
Preguntas y respuestas / Re: Desvanecer sprite
Julio 20, 2011, 02:52:05 AM
En lugar de crear una nueva variable "alfa" y dibujar el sprite manualmente en Draw, pod?s hacer lo que dijo Zigma, pero usando image_alpha.
En step:
[gml]image_alpha = max(image_alpha - 0.1, 0);[/gml]
Y nada m?s.
Si va muy r?pido, cambi? el 0.1 por un n?mero menor, y viceversa. Tambi?n asegurate de que el objeto no tenga evento Draw.
232
Preguntas y respuestas / Re: Cambiar name
Julio 20, 2011, 02:45:40 AM
Hmm... s?, eso era lo que te dec?a. ?Estaba vac?o antes de que lo cambiaras?

Prob? poniendo algo ah?, y despu?s and? sacando objetos de la room (en una copia del juego) y probando, hasta que la room quede vac?a. Fijate si al sacar cierto objeto, el texto queda como lo pusiste en esa caja de texto.
Tambi?n fijate si el room tiene un Creation Code. Hac? click en el bot?n que se ve abajo del todo en la imagen que pusiste.
233
Preguntas y respuestas / Re: Cambiar name
Julio 19, 2011, 10:58:12 PM
Pon? una captura de la propiedad que est?s cambiando.
Y como ya dijeron, busc? si un objeto cambia la caption del room.
234
Preguntas y respuestas / Re: Cambiar name
Julio 19, 2011, 02:31:34 AM
No recuerdo d?nde est? exactamente, y no tengo el GM. Busc? en las propiedades del room. Creo que estaba en la pesta?a "Settings".
235
Preguntas y respuestas / Re: Cambiar name
Julio 19, 2011, 02:09:19 AM
Debe estar en el Room Caption. Fijate en las propiedades del Room, busc? una caja de texto que diga "Room Caption" (o similar) y ah? lo cambi?s.
Pero ten? en cuenta que ah? solo est?s cambiando el texto que aparece como t?tulo en la ventana del juego.
236
Para una nueva duda cre? un nuevo tema, Vectivus.
237
[gml]x = 400;
y = 257;[/gml]
?... eso?
238
De nada :).

Cita de: MaanuRP en Julio 17, 2011, 01:12:07 AMPero igual no funciona igual como yo lo quiero, eso solo avanza si el player esta a 45? u otro angulo en particular, pero la mayoria de los angulos se queda quieto :S
Hmm... a mi me funciona perfecto, y el personaje siempre se mueve a no ser que camine de forma directa o casi directa hacia la pared. ?C?mo implementaste los c?digos que puse? ?Podr?as describir m?s detalladamente el problema? :/
239
Bastantes cosas para notar en el editable que pusiste...

Primero, no uses "transform the sprite" para girar la imagen. Us? image_angle.
[gml]image_angle = direction;[/gml]

Segundo, est?s violando el principio DRY (Don't Repeat Yourself, no te repitas). El principio DRY dice que un c?digo no puede estar repetido. En el evento de colisi?n con el objeto obejct1 y en el evento de colisi?n con el objeto object2 pusiste exactamente el mismo c?digo. En un principio esto solo genera alguna peque?a inconveniencia al tener que cambiar ambos c?digos si cambi?s uno, pero a medida que el juego va creciendo, se vuelve un verdadero problema, y puede generar un mont?n de bugs dif?ciles de encontrar.
La soluci?n es marcar el parent de object2 como object1, y borrar el evento de colisi?n con object2. Al chocar con object2, como es "hijo" de object1, el evento de colisi?n con object1 se ejecuta.

Tercero, est?s usando la variable speed. La variable speed es ?til en ocasiones porque nos permite reducir el c?digo necesario para hacer que el personaje se mueva, pero tiene el problema de que no nos da mucho control sobre el movimiento. En vez de eso, te recomiendo usar move_contact_solid().
Keyboard Check Up:
Moverse en direcci?n "direction" 5 pixeles o hasta tocar algo s?lido.
[gml]move_contact_solid(direction, 5);[/gml]
Keyboard Check Down:
Moverse en direcci?n "direction + 180" (direcci?n contraria a "direction") 5 pixeles o hasta tocar algo s?lido.
[gml]move_contact_solid(direction + 180, 5);[/gml]
Y bueno, al hacer esto, el evento de colisi?n con object1 ya no es necesario, as? que se puede borrar :). Los eventos Key Release Up y Down tambi?n.

Y ahora que el juego est? superoptimizado, respondo tu verdadera pregunta :P.
Supongamos que el jugador se est? moviendo as?:

Para hacer lo que quer?s, primero ten?s que descomponer la direcci?n en dos: la componente "x" y la componente "y". Eso se hace as?:


Ah? la componente "x" est? en rojo y la componente "y" en azul. Como ves, la idea es que si el objeto se mueve en direcci?n de la componente "x" y despu?s en direcci?n de la componente "y" (o viceversa), acaba en la posici?n deseada.
GM tiene dos funciones que sirven justamente para obtener las componentes "x" e "y" de un vector: lengthdir_x y lengthdir_y.
Keyboard Check Up:
[gml]var l_x, l_y, d_x, d_y;
// Obtenemos el largo de las componentes "x" e "y".
l_x = lengthdir_x(5, direction);
l_y = lengthdir_y(5, direction);

// Y su direcci?n.
d_x = 180 * (l_x < 0);
d_y = 270 + 180 * (l_y < 0);

move_contact_solid(d_x, abs(round(l_x)));
move_contact_solid(d_y, abs(round(l_y)));[/gml]
Keyboard Check Down:
[gml]var l_x, l_y, d_x, d_y;
// Obtenemos el largo de las componentes "x" e "y".
l_x = lengthdir_x(5, direction + 180);
l_y = lengthdir_y(5, direction + 180);

// Y su direcci?n.
d_x = 180 * (l_x < 0);
d_y = 270 + 180 * (l_y < 0);

move_contact_solid(d_x, abs(round(l_x)));
move_contact_solid(d_y, abs(round(l_y)));[/gml]
Esos dos ?ltimos c?digos son bastante similares... Ser?an otra violaci?n del principio DRY. Pero voy a dejar que vos pienses en c?mo arreglarla, si es que quer?s :P.

Te dejo adjunto el editable modificado con todas las sugerencias que hice en el post. No uses el script move_contact_solid que viene, lo tuve que crear porque uso LGM, y a?n no tiene una funci?n move_contact_solid.
240
Preguntas y respuestas / Re: [Duda] Views
Julio 13, 2011, 08:53:27 PM
Dej? ambas desactivadas y pon? en el create del player 1:
[gml]view_visible[0] = true;[/gml]

Y en create del 2:
[gml]view_visible[1] = true;[/gml]

Creo que eso ser?a todo.
Ac? ten?s m?s informaci?n: http://www.comunidadgm.org/manual_GM/Vistas_GML.htm