Menú

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.

Menú Mostrar Mensajes

Mensajes - ZELDA

#1
Saludos, he estado tratando de implementar un sistema de dialogo letra por letra en mi proyecto de gms 2 y me acorde que hace años aquí en CGM me había descargado un ejemplo que era de game maker 5 y lo intente primero en gm 8 y funciono genial, pero en gms 2 no, lo que pasa es que los saltos de linea si lo hace bien, pero al momento de pasar a otra pagina del dialogo no lo hace solo se queda en la primera pagina.
Para no ponerles mas texto aquí les dejo un editable que hice con gm 8 y ahí viene el código y en el mismo dialogo les menciono el error.
No puede ver este archivo adjunto.
#2
Muchas gracias, es que tenía esa duda, porque igual no encontraba nada que dijera que había algo mal con place_free
#3
Preguntas y respuestas / Re:como implementar z-axis?
Agosto 01, 2022, 10:40:05 PM
Te paso un engine, se llama Mario Isometric y hace uso de la coordenada Z, igual te pongo aqui un poco de código
en el event create:
z=0
zspeed=0
zgravity=0
landing=0
En el event step:
z+=zspeed
zspeed-=zgravity
if z>landing {zgravity=0.7}
if z<landing{z=landing zgravity=0}
if z=landing{double=true}
Event key (cualquier tecla que quieras):
if z=landing{zspeed=7}
En el evento draw:
draw_sprite(sprite_index, 0, x, y - z)
Igual te recomiendo echarle un vistazo al engine.
#4
Buenas tardes CGM, mi duda es porque usar place_free es considerado como una mala practica, les cuento, hace tiempo en un grupo de Facebook hice una pregunta y les pase el código el cual tenia place_free, uno me contesto la duda que tenia en ese entonces, pero otro me dijo "No uses place_free porque eso es una mala practica mejor usa place_meeting y quitale el solido a los objetos" y le pregunte "¿Por qué es una mala practica?" y solo conseguí que me insultara  XD  y otro le contesto cierto es una mala practica y nunca me dijeron el porque
#5
Ya quedo, tuve que hacerle muchísimas modificaciones al codigo, les dejo el editable arreglado Se los dejo por si alguno tiene problemas similares
Buenos días Comunidad, mi duda es que quisiera lograr slopes con este codigo, para un juego tipo Zelda
repeat (abs(xvel))
{
    if (place_meeting(x + sign(xvel), y, obj_Wall)) { break; }
    x += sign(xvel);
}

repeat (abs(yvel))
{
    if (place_meeting(x, y + sign(yvel), obj_Wall)) { break; }
    y += sign(yvel)
}

if (Down) { yvel = 2; }
if (Left) { xvel = -2; }
if (Up) { yvel = -2; }
if (Right) { xvel = 2; }
if (!Left && !Right) { xvel = 0; }
if (!Up && !Down) { yvel = 0; }
Este mismo codigo lo uso en plataformas, y ahi si logre hacer slopes
repeat(abs(xvel))
{
    var slope = 0;
    while(!place_free(x + xvel, y - slope) && slope <= abs(1 * xvel / 2)) { slope += 1; }
    if (!place_free(x + sign(xvel), y - slope)) { break; }
    else { y -= slope; }
    x += sign(xvel);
    //Bajar slopes
    if (place_free(x, y) && yvel >= 0 && !place_free(x, y + 2 + abs(xvel)))
    {
        while (place_free(x, y + 1)) { y += 1; }
    }
}
y funciona bien en plataformas, pero porque el personaje se pega a la slope y solo avanza cuando uno aprieta izquierda o derecha, pero no en el tipo Zelda
les dejo un editable para que vean el error.
Nota: Uso gms2, pero lo hice de nuevo en gm8 para compartirlo ya que se me hace mas fácil.

EDITO: obtuve un avance, pero igual no queda bien
//Colisiones perfectas en x
repeat(abs(xvel))
{
    slope = 0;
    while(place_meeting(x + xvel, y - slope, object1) && slope <= abs(1 * xvel / 2)) { slope += 1; }
    if (place_meeting(x + sign(xvel), y - slope, object1)) { break; }
    else { y -= slope; }
    x += sign(xvel);
}
//en y
repeat (abs(yvel))
{
    slope = 0;
    while (place_meeting(x - slope, y + yvel, object1) && slope <= abs(1 * yvel)) { slope += 1; }
    if (place_meeting(x - slope, y + sign(yvel), object1)) { break; }
    else { x -= slope; }
    y += sign(yvel);
}
Pueden intentar ponerlo en el editable.
#6
Buenas tardes, uso este codigo para desactivar las instancias:
instance_deactivate_region(camera_get_view_x(0), camera_get_view_y(0), camera_get_view_width(0), camera_get_view_height(0), false, true);
instance_activate_region(camera_get_view_x(0), camera_get_view_y(0), camera_get_view_width(0), camera_get_view_height(0), true);

Pero el problema es que tambien se desactiva el suelo, y al cambiar los valores ya no se borra el suelo que esta debajo,  pero no se activan paredes, ni enemigos, este codigo lo probe en game maker 8 solamente cambiando el cmaera_get_view_x, por el view_xview Y yview respectivamente funciona perfecto pero aqui no
nota:
   -La vista es 400x224
   -En camera_get_view_y y en camera_get_view_height les puse + 192 y no se desactiva el suelo pero no ocurre lo mismo en x ni width.
gracias
Edito: solo tuve que agregar un view_camera[0]:
instance_deactivate_region(camera_get_view_x(view_camera[0]), camera_get_view_y(view_camera[0]), camera_get_view_width(view_camera[0]), camera_get_view_height(view_camera[0]), false, true);
instance_activate_region(camera_get_view_x(view_camera[0]), camera_get_view_y(view_camera[0]), camera_get_view_width(view_camera[0]), camera_get_view_height(view_camera[0]), true);
#7
Lo que yo haria, seria poner un condicional por ejemplo:
En el evento step
if (place_meeting(x, y + 1, obj_Wall) && vspeed >= 10)
{
      Daño = true;
}
#8
Preguntas y respuestas / Problema slopes (SOLUCIONADO)
Noviembre 06, 2018, 02:21:11 PM
Buenas Tardes, he estado probando varios codigos de colisiones perfectas(y uno me gusto mas que los demas) y quise juntarlo con un codigo de slopes que me funciono con otro, pero con este solamente funciona bajando los lopes y no subiendo el codigo es este:
//Bucle para colisiones perfectas en X
repeat(abs(xvel))
{
    slope = 0;
    while(!place_free(x, y - slope) && slope <= abs(1 * xvel)) { slope += 1; }
    if (!place_free(x + sign(xvel), y - slope)) { break; }
    else
    {
        y -= slope;
    }
    x += sign(xvel);
    //Bajar slopes
    if place_free(x, y) && yvel >= 0 && !place_free(x, y + 2 + abs(xvel))
    {
        while (place_free(x, y + 1))
        {
            y += 1;
        }
    }
}

//Bucle para colisiones perfectas en Y
repeat(abs(yvel))
{
    if (!place_free(x, y + sign(yvel)))
    {
        if (yvel >= 0) { saltos = 0; }
        break;
    }
    y += sign(yvel);
}

EDITO: Ya lo solucione, modifique esta parte:
slope = 0;
while(!place_free(x + xvel, y - slope) && slope <= abs(1 * xvel / 2)) { slope += 1; }
#9
Muchas gracias ya quedo!
#10
Cita de: BssString en Agosto 15, 2018, 02:28:03 PM
Hola ZELDA

Yo lo haría de la siguiente manera:

CREATE EVENT
DashLeft = false //revisa si debe ejecutar el dash hacia la izquierda
DashRight = false //revisa si debe ejecutar el dash hacia la derecha


ALARM 1 EVENT
DashLeft = false //revisa si debe ejecutar el dash hacia la izquierda
DashRight = false //revisa si debe ejecutar el dash hacia la derecha


STEP EVENT
if keyboard_check_pressed(vk_left) {
if DashLeft = false { //Revisa si no hemos apretado izquierda antes
DashRight = false //Cancela el intento de dashear a la derecha
DashLeft = true //Setea la variable para ver si debe hacer el dash
alarm[1] = 15 //Setea el timer para contar el dash
}
else { /*hacer el dash a la izquierda*/ } //Si ya habíamos izquierda antes y la volvemos a apretar dentro de los 15 steps, entonces efectua el dash
}
//El mismo código para la tecla derecha
if keyboard_check_pressed(vk_right) {
if DashRight = false {
DashLeft = false
DashRight = true
alarm[1] = 15
}
else { /*hacer el dash a la derecha*/ }
}


Por lo que veo de tu código, para decirle a donde hacer el dash basta con hacer:
canDash = true
dir = <1(izquierda) o 0(derecha)>

Tu código hará el resto

Saludos
Gracias por contestar, creo que no me entendiste, mira el dash se podia hacer, el codigo de dash no tiene el problema el problema es el codigo de apretar 2 veces la tecla mi codigo tiene un problema y es el que no es preciso y no siempre lo hace.
Y el codigo que pones lo hace infinitamente mientras tenga apretada la tecla de una direccion.
Saludos
EDITO: El codigo quedo asi:
if (Left)
{
    if (DashLeft == false)
    {
        DashRight = false;
        DashLeft = true;
        alarm[1] = 15;
    }
    else 
    {
        canDash = true;
    }
    
}
else if (Right)
{
    if (DashRight == false)
    {
        DashRight = true;
        DashLeft = false;
        alarm[1] = 15;
    }
    else
    {
        canDash = true;
    }
}
#11
Bueno en realidad ya tengo el Dash, con el que tengo el problema es con el codigo de apretar 2 veces una direccion para poder hacer el Dash, lo que pasa es que siento que no es muy preciso es decir no siempre lo hace y no se de que forma mejorarlo el codigo es este:
Evento step
//Apretar 2 veces una direccion para hacer el dash
tiempo += 1;
if (tiempo >= 20)
{
    if (!Left || !Right)
    {
        n_vecesL = 0;
        n_vecesR = 0;
    }
    tiempo = 0;
}
if (!LeftPress) { canDash = false; }
if (!RightPress) { canDash = false; }
if (LeftPress)
{
    n_vecesL += 1;
}
if (RightPress)
{
    n_vecesR += 1;
}
if (n_vecesL == 2 || n_vecesR == 2)
{
    canDash = true;
}

//Dash
if (!place_free(x, y + 1))
{
    if (canDash)
    {
        if (dash == 0)
        {
            if (canMove == 1)
            {
                dash = 1;
                if (dir = 1 && dash = 1) { hspd = -spd * 4.2 }
                if (dir = 0 && dash = 1) { hspd = spd * 4.2 }
                canMove = 0;
                alarm[0] = 15;
            }
        }
    }
}

Alarma 0
canMove = 1;
dash = 0;
canDash = false;

Les dejo el editable para que vean el codigo completo
Nota: el room esta en 60
Saludos
#12
Preguntas y respuestas / Re:Error WallJump
Agosto 08, 2018, 11:30:00 PM
Muchas gracias era algo tan simple, XD llevaba una semana rompiendome la cabeza.
Saludos
#13
Preguntas y respuestas / Error WallJump (SOLUCIONADO)
Agosto 08, 2018, 09:34:14 PM
Buenos dias CGm tengo un problema con mi codigo de wall jump el problema es que al regresar al bloque en el cual se le hizo el wallJump ya no hace mas el wall jump hasta que toca el suelo ya se puede y ese puede ser un problema cuando se esta jugando  XD el codigo que estoy usando para el wallJump es:
//WallJump
if(place_free(x, y + 1))
{
    if (Jump)
    {
        if (Right and !Left and !place_free(x + 1, y) and wallJump = 1)
        {
            canMove = 0;
            alarm[0] = 12;
            wallJump = -1
            dir = 1
            vspd = -velSalto * 1.1;
        }
        if (Left and !Right and !place_free(x - 1, y) and wallJump = -1)
        {
            canMove = 0;
            alarm[0] = 12;
            wallJump = 1;
            dir = 0
            vspd = -velSalto * 1.1;
        }
    }
}
if (canMove = 0)
{
    if (dir = 0) { hspd = spd * 2.2; }
    if (dir = 1) { hspd = -spd * 2.2; }
}

//Deslizamiento paredes
if (Right && !place_free(x + 1, y) && vspd > 0)
{
    vspd = 1;
}
else if (Left && !place_free(x - 1, y) && vspd > 0)
{
    vspd = 1;
}

Les dejo una imagen gif del error y el editable. [https://gifs.com/gif/4RZ0BJ
Saludos
#14
Muchas gracias ya quedo, el salto gradual ya lo solucione, y si queda mejor a la velocidad a 30, en el codigo del salto lo modifique para que se pudiera hacer el doble salto quedando asi:
//Salto
if (!place_free(x, y + 1))
{
    canMove = 1
    if (saltos = 0)
    {
        if (Jump)
        {
            vspd = -velSalto;
            if (dir = 0)
            {
                wallJump = 1
            }
            else if (dir = 1)
            {
                wallJump = -1
            }
        }
    }
}
//Segundo salto
else
{
    if (saltos = 0) { saltos = 1; }
    if (saltos = 1)
    {
        if (Jump)
        {
            vspd = -velSalto;
            if (dir = 0)
            {
                wallJump = 1
            }
            else if (dir = 1)
            {
                wallJump = -1
            }
            saltos = 2;
        }
    }
}

Muchas gracias!
#15
Cita de: Goganpis en Mayo 27, 2018, 04:09:16 PM
bueno tendria que checar todo tu codigo pero ya eso es tu decision por cierto la variable walljump no la uses ya que al tocar suelo a que pared vas a ir, pero si la quieres usar sincronizalo de esta forma antes de ese codigo que tienes
Gracias por contestar, claro puedes revisar el codigo, estoy dispuesto a recibir criticas constructivas y destructivas, el salto gradual ya quedo gracias ;), pero el wallJump no me sale, la velocidad del room esta en 60 si quieres cambiarlo para debuggear