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 - Guacusio

256
Si no necesitas gran precisión para medir 5 minutos, puedes hacer esto:

Evento create:
alarm[0]=room_speed*60*5;//alarma que sonará en 5 minutos

Evento alarm[0]:
global.experiencia+=10;
alarm[0]=room_speed*60*5;//alarma que sonará en 5 minutos


Sería bueno que luego compruebes, en el mismo evento alarm[0], si tienes la suficiente experiencia para subir de nivel:
if global.experiencia>=exp_n2
    global.nivel=2;
if global.experiencia>=exp_n3
    global.nivel=3;
if global.experiencia>=exp_n4
    global.nivel=4;
.
.
.
etc.


257
Cita de: fasst007 en Agosto 08, 2015, 07:47:59 PM
También podrías hacer un solo room grande que encierre a todo el nivel y manejando los views hacer que solo se muestre una sección del mismo y cuando el personaje llegue al borde del view este se corra a derecha, izquierda, arriba o abajo una cantidad de píxeles igual al ancho del view (en caso de atravesar el lateral de la sala) o el alto del view (en el caso de atravesar el limite superior o inferior de la sala) en la dirección correspondiente. Entonces los movimientos del personaje serían fluidos y naturales y lo que daría la ilusión de cambio de sala es el cambio de ubicacion del view simplemente.



Esa es otra solución, aunque tiene la desventaja de que todas las instancias dentro del room estarán activas consumiendo recursos, pudiendo ser necesario desactivar las instancias fuera del view.

Cita de: Jangse en Agosto 08, 2015, 07:05:20 PM
En esta imagen usando el programa mappy se puede observar a lo que me refiero. Las lineas azules serian las divisiones entre rooms. Y al hacer el mapa de esa manera es mas dificil que nos equivoquemos entre las entradas y salidas de las rooms. Ya que en GM se suele tratar el mapa de forma individual. De room en room ¿Conoces alguna forma de crear el mapa de forma general y luego pasarlo a GM?

No conozco una utilidad como Mappy para Spectrum que sirva para diseñar los mapas y luego exportarlos a GM.

CitarSupongo que para no poner tantos if y case se deberia recurrir a arreglos y a sus indices.

Por otro lado, ¿La funcion scr_actualiza_gx_gy() es exclusiva de GMS?

Se puede hacer con arreglos, aunque primero tendrás que definirlos elemento a elemento. Por ejemplo, se puede guardar en un arreglo las coordenadas de la esquina superior izquierda de cada room dentro del mapa, tomando esta forma para el ejemplo anterior:

[A  0   0]
[B  w   0]
[C  2w  0]
[D  w   h]
[E  2w  h]

Queda un arreglo donde la primera columna representa el room y la segunda y tercera sus coordenadas dentro del mapa.

Pasando esto a código:

Evento create:
w=room_width;
h=room_height;
rooms[0,0]=A;
rooms[0,1]=0;
rooms[0,2]=0;
rooms[1,0]=B;
rooms[1,1]=w;
rooms[1,2]=0;
rooms[2,0]=C;
rooms[2,1]=2*w;
rooms[2,2]=0;
rooms[3,0]=D;
rooms[3,1]=w;
rooms[3,2]=h;
rooms[4,0]=E;
rooms[4,1]=2*w;
rooms[4,2]=h;
nrooms=5;
scr_actualiza_gx_gy();


Evento outside room:
var r;
r=-1;
scr_actualiza_gx_gy();
for(i=0;i<nrooms;i+=1)
    {
    if gx>=rooms[i,1] and gx<(rooms[i,1]+w) and gy>=rooms[i,2] and gy<(rooms[i,2]+h)
        r=rooms[i,0];
    }
if r=-1//no hay room hacia donde va el personaje
    {
    show_message("Fuera del escenario");
    x=xprevious;
    y=yprevious;
    exit;
    }
if x<0
    x+=w;
else if x>=w
    x-=w;
if y<0
    y+=h;
else if y>=h
    y-=h;
room_goto(r);


script scr_actualiza_gx_gy:
for(i=0;i<nrooms;i+=1)
    {
    if room=rooms[i,0]
        {
        gx=x+rooms[i,1];
        gy=y+rooms[i,2];
        }
    }


Esta es una forma mucho más estructurada de manejar el problema ya que para cambiar la configuración del mapa sólo se requiere modificar el arreglo en el evento create.

La función scr_actualiza_gx_gy no viene como parte del repertorio de funciones de GM, la inventé yo para calcular gx,gy pues necesito hacerlo en 2 partes distintas, y su código lo indico arriba. Adjunto el mismo ejemplo modificado para funcionar con arreglos.

258
Para tu pregunta de mantener la animación entre cambios de room, puedes hacer que el objeto personaje sea persistente y así al cambiar de room mantendrá la posición en la secuencia de subimágenes.

Para tu segunda pregunta, se me ocurrió una forma de hacer que una instancia viaje a través de un mapa de rooms manteniendo las condiciones de borde de éste (es decir, que si sale por la derecha de un room luego aparezca por la izquierda del room contiguo hacia donde entra). Mi idea es la siguiente:

-Crea a mano un esquema con el mapa de los rooms para visualizar qué room está contiguo a otro. Usa las mismas dimensiones para todos los rooms
-En el objeto jugador guarda un par de variables, digamos gx,gy que representen las coordenadas del jugador respecto al mapa de rooms, considerando (0,0) la coordenada (0,0) del room de más arriba a la izquierda en el mapa de rooms.

En el evento outside room:

-Actualiza estas variables en función de las coordenadas del personaje (x,y) y del room en que se encuentra
-Determina a qué room debe ir el personaje en función de los valores de (gx,gy)
-Actualiza las coordenadas (x,y) del personaje antes de ir al nuevo room

Por ejemplo, teniendo 5 rooms llamados A,B,C,D,E agrupados en el siguiente mapa:



En este mapa se puede pasar de A a B avanzando hacia la derecha desde A, pero no se puede salir de A avanzando hacia abajo ya que no hay room bajo A. Así mismo, no debe permitirse al personaje salirse del perímetro del mapa y tendrás que asegurarte de que así sea revisando sus coordenadas o colocando muros.

En el objeto personaje coloca el siguiente código:

Create:
w=room_width;
h=room_height;
scr_actualiza_gx_gy();


Outside room:
var r;
r=-1;
scr_actualiza_gx_gy();
if gy>=0 and gy<h
    {
    if gx>=0 and gx<w
        r=A;
    else if gx>=w and gx<2*w
        r=B;
    else if gx>=2*w and gx<3*w
        r=C;
    }
else if gy>=h and gy<2*h
    {
    if gx>=w and gx<2*w
        r=D;
    else if gx>=2*w and gx<3*w
        r=E;
    }
if r=-1//no hay room hacia donde va el personaje
    {
    show_message("Fuera del escenario");
    x=xprevious;
    y=yprevious;
    exit;
    }
if x<0
    x+=w;
else if x>=w
    x-=w;
if y<0
    y+=h;
else if y>=h
    y-=h;
room_goto(r);


Script scr_actualiza_gx_gy:
switch room
    {//actualiza gx:
    case A:
        gx=x;
        break;
    case B:
    case D:
        gx=x+w;
        break;
    case C:
    case E:
        gx=x+2*w;
        break;
    }
switch room
    {//actualiza gy:
    case A:
    case B:
    case C:
        gy=y;
        break;
    case D:
    case E:
        gy=y+h;
        break;
    }


Queda a tu voluntad la manera en que controlas al personaje para cambiar sus coordenadas (x,y). Para otros mapas de rooms tendrás que modificar los if y switch para abarcar las maneras que tengas de pasar de un room a otro contiguo. Nota que este método no necesita que el personaje comience en el primer room (el room A en el ejemplo); puede partir desde cualquiera.

No tengo GM8 pero en caso de que alguien use GMS adjunto el ejemplo que indiqué.
259
Sería bueno que aclararas algunas cosas para poder ayudarte:

-¿objectMOUSECLICK tiene las mismas coordenadas del mouse?
¿spriteMEGAMAN_DER consta de 3 subimágenes?
-Manipulas en algún momento la variable image_index del personaje?
-¿La variable image_speed del personaje es mayor a cero?
260
Se puede, y existen funciones especializadas para eso en GMS: busca en la referencia del manual (http://docs.yoyogames.com/) el tema Networking. Antes de lanzarte a programar con esas funciones tendrás que manejar los conceptos de cliente, servidor, eventos asíncronos, puertos, sockets y buffers. Un ejemplo de tutorial lo encuentras en la misma comunidad:

http://www.comunidadgm.org/articulos/(programacion)hacer-un-juego-multijugador-online-con-game-maker-studio-ver2/
261
Otra posibilidad es que como la path que le asignas al objeto en el evento create es absoluta, se crean efectivamente dos instancias de éste pero se mueven una sobre la otra dando la impresión de que hay sólo una instancia; prueba colocando la path como relativa.
262
Preguntas y respuestas / Re:rooms tipo laberinto
Agosto 05, 2015, 09:24:21 PM
Cita de: penumbra en Agosto 05, 2015, 07:19:32 PM
"Si la habitación anterior fue la habitación xx posiciónate en las coordenadas"

EVENTO ROOM_START
[gml]
if (room_previous(room) == room_xx)
{
     x = El valor que quieras
     y = El valor que quieras
}
[/gml]

La desventaja de este método es que se van a tener que usar muchos IF, al menos uno por cada habitación cuando quieras especificar una posición en concreto.

Pero la función room_previous(x) representa el room anterior al room x en el árbol de recursos, es decir el que está más arriba en éste y no el room que estaba activo antes de cambiar a otro room.

Lo que yo haría sería guardar el último room visitado en una variable y actualizarla en el evento room_end. Luego, en el evento room start hacer lo que dice penumbra, tal vez llamando a un script que englobe todas las combinaciones en vez de hacer un código especial por cada room, para facilitar la depuración. Por ejemplo algo así:

Evento room end:
global.room_anterior=room;

Evento room start:
posiciona_personaje();

Script posiciona_personaje:
var r;
r=global.room_anterior;
switch room
    {
    case room1:
        if r=room2
            //código para el caso de que llegue desde el room 2
        else if r=room3
            //código para el caso de que llegue desde el room 3
         else if r=room_enésimo
            //código para el caso de que llegue desde el room enésimo
         break;
    case room2:
        if r=room1
            //código para el caso de que llegue desde el room 1
        else if r=room3
            //código para el caso de que llegue desde el room 3
         else if r=room_enésimo
            //código para el caso de que llegue desde el room enésimo
         break;
    .
    .
    .
    etc.
    }

263
Preguntas y respuestas / Re:Lio con los mandos.
Agosto 05, 2015, 09:01:40 PM
El exportable que adjuntaste funciona bien con un mando Xbox360: se puede controlar la nave con la palanca. Sin embargo, ese código no te servirá para los mandos tipo "PS Control Pad" sin palanca. Si tu juego es de un solo jugador, para hacerlo compatible con ambos tipos de joystick te sugiero que primero compruebes que la función gamepad_is_connected(0) devuelve true; si es así, usa el código con las funciones gamepad que adjuntaste y en caso contrario usa las funciones joystick (no es tan engorroso como parece). Para dilucidar el asunto de por qué la nave se va hacia la izquierda habría que revisar el código que usas con las funciones joystick.

Cita de: canuto120 en Agosto 05, 2015, 09:43:22 AM
Es problema del emulador y su configuracion o del mando en si, por la sensibilidad del mismo, en su dia intente jugar con mando de ps3 al kingdom hearts de la ps2 emulador ps2 y el personaje se me iba todo el rato hacia un lado si no tocaba nada, me pasaba con todos los juegos al que intentaba jugar con el mando de ps3.

No creo que sea el caso. Probé el juego de Marth (http://www.comunidadgm.org/juegos-en-desarrollo/iliada-espacial/) con un joystick tipo PS Control Pad sin usar ningún emulador y la nave se va sola hacia la esquina de la pantalla; tampoco es problema de calibración del joystick porque lo probé en otros juegos y eso no me sucede.
264
Preguntas y respuestas / Re:Lio con los mandos.
Agosto 05, 2015, 05:16:25 AM
¿Sería posible ver el código con el cual lees el joystick? ¿Mapeas el joystick a las teclas correspondientes?
265
Juegos en desarrollo / Re:Ilíada Espacial
Agosto 04, 2015, 04:42:06 PM
Estos son los joysticks con que probé:



Yo no logré leer mi joystick genérico con las funciones gamepad en las pruebas que hice pero tu dices que lo lograste (independientemente del tema de que la nave se vaya a la izquierda)... Qué extraño que a mí no me funcione y tenga que recurrir a las legacy.

Las complicaciones que encontré son las que dices: el joystick de xbox360 (original) no lo reconoce siquiera mientras que el genérico hace que la nave se vaya permanentemente hacia la esquina superior izquierda, como si en el pad se hubieran quedado pegadas las direcciones arriba-izquierda (también suceden cambios extraños en el room_speed según si el joystick genérico está conectado o no). Estoy de acuerdo en que Yoyo cometió un error al no disponer de funciones universales para leer joysticks.

Tal vez debieras plantear el problema en el foro de preguntas y respuestas para ver si a alguien le pasa algo similar o se le ocurre una solución.
266
Gracias por la respuesta. Parece que el método que propones es el más eficiente; se podría comprimir aún más como:

if variable!=0
     incremento *= -1
variable += incremento


Ahora, la página de textura es una sola y me caben con holgura los 16 sprites de 32x32 en ella (para el caso de que todo lo haga con varias subimágenes en vez de usar código en step). Respecto a las funciones trigonométricas, tenía entendido que son rápidas y por eso no las descarté desde el principio (https://www.yoyogames.com/tech_blog/75). Sin embargo, parece que me voy a decantar por el método de las subimágenes.
267
Juegos en desarrollo / Re:Ilíada Espacial
Agosto 04, 2015, 05:12:49 AM
Probé con un mando genérico sin sticks y si no se está usando el pad durante el juego, la nave se va sola hacia la esquina superior izquierda de la pantalla. Si lo desconecto durante el juego, se puede mover la nave con las flechas pero si lo conecto, se vuelve imposible usar las flechas y la nave se va hacia la esquina de la pantalla.

Probé con un mando de Xbox360 y no lo reconoce.

¿Qué funciones estás usando para leer el joystick? Por lo que dices son las legacy, esas funciones sólo pueden leer el stick en joysticks de Xbox360 y no el pad.
268
Estoy tratando de implementar una variable que tome los valores discretos 1, 0, -1, 0 en ese orden, cambiando a un nuevo valor en cada step. Es decir, para los primeros steps de juego la variable valdría lo siguiente:

Step   Variable
1        1
2        0
3        -1
4        0
5        1
6        0
7        -1
8        0
9        1
10        0
etcétera

Mi pregunta es cuál será la forma más eficiente de hacer esto, dado que en el peor de los casos habrá 154 instancias ejecutando el código para darle el valor a la variable. Pensé en 3 formas (tomando como v la variable y n una variable auxiliar que parte en 0 y se incrementa en 1 en cada step):

1. Una función definida como:

v=-n+1    para n=0,1,2
v=0           para n=3

Además el código tendrá que hacer n=0 cuando n>3

2. usando trigonometría:

v=cos(n*pi()/2)
para n=0,1,2,3,4,etc.

Esta forma tiene la ventaja de que no requiere resetear a cero la variable n

3. Definiendo una función para cada valor de n (se parece a la solución Nº1 pero no requiere descomponer la función en 2 partes):

f[0]=1;
f[1]=0;
f[2]=-1;
f[3]=0;
v=f[n];
para n=0,1,2,3

Esta forma también requiere hacer n=0 cuando n>3

Voy a ser más concreto. Todo esto es para poder desplazar un sprite horizontalmente 1 pixel para dar la impresión de que está vibrando. Mi idea es que en el evento draw el código tome la forma:

draw_sprite_ext(sprite_index,-1,x+v,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha);

Pensé en hacer que el sprite (que es de 32x32) tenga 4 subimágenes en vez de una, con cada subimagen desplazada 1 pixel horizontalmente respecto a la anterior de acuerdo a la secuencia que indiqué y así me evito todo el problema del cálculo de v en el evento step. Pero como voy a tener 4 objetos que tienen que hacer esto, cada uno con su sprite, paso de tener 4 imágenes de 32x32 a 16 imágenes de 32x32. Tal vez esta forma no sea tan descabellada considerando los tamaños de los sprites.

¿Qué será más eficiente de hacer para lograr lo que quiero?   :-\
269
En el momento en que un player se destruya, revisa cuántas instancias de él quedan con la función instance_number. Si quedan cero es porque se destruyeron todos los player.
270
Juegos completos / Cacumen
Agosto 03, 2015, 06:01:18 AM

Cacumen

Puzzle

GM: Studio

¡Demuestra tu astucia resolviendo singulares puzzles de imágenes eróticas!
¡Comprueba que tienes el cacumen que se requiere para ensamblar las piezas!
Cacumen es un juego de piezas deslizantes donde debes armar una imagen cuyas partes han sido desordenadas. ¡Termina de armar una imagen y acepta el siguiente desafío!

-¡Escoge una imagen desbloqueada que hayas completado o intenta desbloquear una nueva jugando al modo Aventura!
-Selecciona el número de piezas de la imagen entre 3x3 y 4x4. ¿Que 4x4 es muy difícil? Bueno, ¡como recompensa desbloquearás 2 imágenes simultáneamente en vez de una!
-¡Elabora una estrategia para mover una pieza al punto que deseas sin deshacer el trabajo ya hecho!







Versión Windows imágenes femeninas: https://drive.google.com/open?id=0B7kwdvQ3WxTncGh4MDlicnhFZTg
Versión Windows imágenes masculinas: https://drive.google.com/open?id=0B7kwdvQ3WxTnVGJWanUtSWRIcGc
Versión Android imágenes femeninas: https://drive.google.com/open?id=0B7kwdvQ3WxTnZ2ZKQkVTSVEyNHM
Versión Android imágenes masculinas: https://drive.google.com/open?id=0B7kwdvQ3WxTnWDl5aWVheUVVME0


Cacumen está disponible para Windows y Android. Para cada plataforma existe además una versión con desnudos de mujeres y otra con desnudos de hombres. ¡No hay excusa para no probarlo, seas hombre o mujer!

Agradecimientos a penumbra por sus sugerencias (no es necesario volver al menú de inicio para jugar una imagen recién desbloqueada; añadido un tema adicional al repertorio de música de fondo).