Noticias

¡Ayuda a la Comunidad GM, haz una donación!

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Mostrar Mensajes

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


Temas - Hezz

Páginas: 1
1
Buenas gente! Tengo un problema con la colision vertical entre una plataforma que se vaya moviendo por el nivel y el personaje. Mi idea es que el personaje se mueva "solo" (o sea, que la plataforma le lleve) al estar encima de la misma. Horizontalmente no tengo ningún problema, pero con las colisiones verticales se me complica.
Personaje: script de colisíon:
//Colisión vertical
if (place_meeting(x,y+vsp,argument0)){
    while(!place_meeting(x,y+sign(vsp),argument0)) {y += sign(vsp);}
    vsp = 0;
    on_ground = true;
}
//Colisión horizontal
if (place_meeting(x+hsp,y,argument0)){
    while(!place_meeting(x+sign(hsp),y,argument0)) {x += sign(hsp);}
    hsp = 0;
}

//Si atravesó la hitbox en el step anterior
if (place_meeting(x,y,argument0) && last_move != -1){
    switch (last_move){
        case 0:
            while(place_meeting(x-1,y,argument0)) {x++;} //Derecha
            x -= 1;
            break;
        case 1:
            while(place_meeting(x,y+1,argument0)) {y--;} //Arriba
            y -= 1;
            break;
        case 2:
            while(place_meeting(x+1,y,argument0)) {x--;} //Izquierda
            x += 1;
            break;
        case 3:
            while(place_meeting(x,y-1,argument0)) {y++;} //Abajo
            y += 1;
            break;
    }
}

//Actualizar variable
last_move = -1;

//Si atraviesa la hitbox48x48
if (place_meeting(x,y,argument0)){
    //Actualizar variables
    x_ = x;
    y_ = y;
    y_p = 0;
    y_n = 0;
    x_p = 0;
    x_n = 0;
    //Ver qué dirección es la más corta para salir de la colisión
    while(place_meeting(x,y-1,argument0)) {y++; y_p++;} //Desde arriba
    x = x_;
    y = y_;
    while(place_meeting(x,y+1,argument0)) {y--; y_n++;} //Desde abajo
    x = x_;
    y = y_;
    while(place_meeting(x-1,y,argument0)) {x++; x_p++;} //Desde izquierda
    x = x_;
    y = y_;
    while(place_meeting(x+1,y,argument0)) {x--; x_n++;} //Desde derecha
    x = x_;
    y = y_;

    //Mover al objeto a la posición
    var result = min(y_p,y_n,x_p,x_n);
    if (y_p == result) {y += y_p-1; last_move = 3;} //Abajo
    else if (y_n == result) {y -= y_n-1; last_move = 1;} //Arriba
    else if (x_p == result) {x += x_p-1; last_move = 0;} //Derecha
    else if (x_n == result) {x -= x_n-1; last_move = 2;} //Izquierda
}

Plataforma: Evento CREATE:
///VALORES GENERALES
change_state = false;
state = true; //Si se está moviendo o no
go_to = 1; //Si es 1, va desde x1, y1 a x2, y2, y si es -1 va desde x2, y2 a x1, y1.
dist = 0; //Distancia entre el punto x, y hasta el destindo
_dist = 0; //Distancia entre el punto x, y desde la salida
dir = 0; //Ángulo entre el punto A y el punto B
hitbox = instance_create(x,y,obj_hitbox48x48); //ID del objeto hitbox que se usará como hitbox de la plataforma

spd = 0;
Plataforma: Evento STEP:
///CONTROL DE ESTADO
dir = point_direction(x1,y1,x2,y2);
//Cambiar de estado
if (change_state){
    change_state = false;
   
    //Cambiar estado
    if (state) {state = false;}
    else {state = true;}
}

//Comprobar el estado
if (state){
    //Desde qué punto hasta qué punto
    if (go_to == 1) {dist = point_distance(x,y,x2,y2); _dist = point_distance(x,y,x1,y1);}
    else if (go_to == -1) {dist = point_distance(x,y,x1,y1); _dist = point_distance(x,y,x2,y2);}
    //Moverse
    if (_dist < 48) {spd = log10(1.1+_dist/3)*go_to}
    else if (dist < 48) {spd = log10(1.1+dist/3)*go_to}
   
    //Detenerse
    if (dist < spd || (spd < 0.1 && spd > -0.1) && _dist >= 48){
        if (go_to == 1) {x = x2; y = y2; go_to = -1;}
        else if (go_to == -1) {x = x1; y = y1; go_to = 1;}
    }
}

//Colision con el personaje
//if (place_meeting(x,y-1,obj_character)){ ANTERIOR
if (y > obj_character.y - 0.1 && place_meeting(x,y-1,obj_character)){
    obj_character.x += spd * cos(degtorad(dir));
    obj_character.y += spd * -sin(degtorad(dir));
}

//Mover la plataforma
x += spd * cos(degtorad(dir));
y += spd * -sin(degtorad(dir));

//Mover la hitbox
if (hitbox != 0){
    hitbox.x = x;
    hitbox.y = y;
}

Adjunto un video para que se entienda mejor mi problema.
Cuando la imagen del personaje es azul es porque está cayendo. Cuando es roja es porque está quieto o "idle".

2
Preguntas y respuestas / Personaje en un juego plataformas (físicas de GM)
« en: Noviembre 30, 2018, 11:22:28 pm »
Tengo dudas sobre el motor de físicas de Game Maker, y es que no sé crear un personaje para un juego plataformas. Estuve haciendo algunas pruebas, pero no logro hacer un sistema de colision que quede bien para el personaje. Además de que el movimiento básico me cuesta configurar. Dejo adjunto el archivo donde hice las pruebas.

Este es el código de mi personaje:
CREATE
spd = 350;
jumpspd = 130;

phy_fixed_rotation = true;

STEP
movement_normal(obj_suelo);
movement_normal(obj_cuadrado);
movement_normal(obj_circulo);
movement_normal(obj_triangulo);

SCRIPT
//Direnccion en la que se mueve
var dir = keyboard_check(ord("D"))-keyboard_check(ord("A"));

//Detectar colision
if (position_meeting(x-14,y+33,argument0) || position_meeting(x+14,y+33,argument0)){
    //Horizontal (tocando suelo)
    physics_apply_force(x,y,dir*spd,0);
   
    //Vertical (tocando suelo)
    if (keyboard_check(vk_space)){
        physics_apply_impulse(x,y,0,-jumpspd);
    }
}
else{
    //Horizontal (al no tocar suelo)
    physics_apply_force(x,y,dir*spd/10,0);
}

Y estas las propiedades de la room:
Relación píxeles/metros: 0.05
Gravedad x: 0
Gravedad y: 30

Ignoren el hecho de que el script se repite en el evento step. Simplemente lo hice así para probar las colisiones con otros objetos dinámicos. Pero al estar un script detectando una posición y otro otra posición, la fuerza se acumula y se mueve más rápido y salta más alto.

3
Preguntas y respuestas / Movimiento de la ventana en la pantalla.
« en: Noviembre 02, 2018, 02:38:47 am »
Hola comunidad! Tengo un problema con la ventana de mi juego cuando quiero hacer que se mueva por la pantalla. Quiero hacer que al moverse mi personaje la ventana se mueva con él, y lo consegí, pero se queda de una forma muy rara alrededor de la misma. Adjunto un video grabado con el celular :-[. Gracias por la ayuda!

4
Hola gente! Tengo una duda con el tema de las resoluciones. Quiero hacer que en el menú de opciones los jugadores puedan elegir la resolución que quieran usar para que se ajuste mejor a sus pantallas o gustos, pero que la calidad gráfica no empeore o que no disminuya mucho al cambiar entre una resolucion alta a una más baja. Ejemplo, estoy haciendo el juego en una pc con un monitor de 1440x900 y quiero que al cambiar la resolucion en una de 1024x600 se adapte bien.

Estuve viendo algunos posts anteriores, pero antes de implementarlo a mi juego quiero saber bien sobre el tema. Gracias de antemano.
http://www.comunidadgm.org/preguntas-y-respuestas/resolucion/msg105734/#msg105734
http://www.comunidadgm.org/preguntas-y-respuestas/dejar-que-el-usuario-elija-resolucion-de-pantalla-para-el-juego-(solucionado)/msg78075/#msg78075

5
Hola a todos. Esoty intentando hacer un juego online y es mi primer proyecto donde lo aplico, por lo que estoy bastante verde en el tema.
Mi duda es la siguiente: Quiero hacer un servidor y un cliente por aplicaciones separadas, y de momento los clientes se conectan y se desconectan de forma correcta. Pero al intercambiar datos sobre los estados de los clientes (posiciones "x" e "y", u otras variables) el servidor no recibe los datos, y por consecuencia, tampoco los demás usuarios conectados. Para ser más específico, los clientes se mueven en la room y todo, pero en el servidor no pasa nada; y si ahí no sucede nada, los clientes no reciben información sobre el estado de los otros usuarios. Creo que mi error puede estar en que los paquetes los envío desde el evento STEP y no desde el asincróncio NETWORKING, pero no sé mucho sobre el tema. En mi caso, tanto el cliente como el servidor envían los datos desde el evento STEP. Gracias de antemano.

6
Preguntas y respuestas / Movimiento aleatorio de los enemigos
« en: Julio 07, 2018, 03:08:34 am »
Hola a todos. Tengo un problema con mi juego, y es que quiero hacer que mi enemigo se mueva de forma aleatoria por el nivel, antes de que el jugador se acerque y lo detecte, como un modo idle. Este efecto está en algunos juegos RPG, pero no puedo replicarlo, ¿alguna ayuda?

Este es el código que estoy probando:
Código: [Seleccionar]
///Create
//Stats del enemigo
hp = 10;
dmg = 3;
speed = 1;

//Valores para movimiento aleatorio
xr = 0;
yr = 0;

//Iniciar la randomizacion del movimiento
alarm[0] = 90; //1.5 seg

///Alarm[0]
xr = random(196) * choose(1,-1) + x;
yr = random(196) * choose(1,-1) + y;

mp_potential_step(xr,yr,speed,false);

sprite_index = spr_skeleton_walking;
image_speed = 0.2;

///Step
depth = -y;
if (mp_potential_step(xr,yr,speed,false)){
    alarm[0] = 120 + random(120);
    sprite_index = spr_skeleton_idle;
}

///Game start
randomize();

Páginas: 1