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

1
Te recomiendo empezar viendo tutoriales de juegos de plataformas, aquí pongo algunos buenos:
[spoiler]
https://www.youtube.com/watch?v=5d7r95CruRg
https://www.youtube.com/watch?v=oIAOO14dV90
https://www.youtube.com/watch?v=laq930_oewU
[/spoiler]
2
Si entiendo bien, buscas un movimiento en cuadrículas ¿no? quizás te sirva este código:
[gml]
if place_snapped(32,32)
{
    speed = 0;
   
    if keyboard_check(vk_left)
    {
        speed = 4;
        direction = 180;
    }
    if keyboard_check(vk_right)
    {
        speed = 4;
        direction = 0;
    }
    if keyboard_check(vk_up)
    {
        speed = 4;
        direction = 90;
    }
    if keyboard_check(vk_down)
    {
        speed = 4;
        direction = 270;
    }
}
[/gml]
Esto sería para moverse entre espacios de 32x32 a velocidad de 4, puedes darle cualquier velocidad que sea divisor de 32.
3
Preguntas y respuestas / Re:Me pueden ayudar
Diciembre 08, 2020, 12:16:56 AM
[gml]
if instance_number(virus)==0 and not instance_exists(covicho)
{
     instance_create(200,100,covicho);
}
[/gml]

Comprueba que no exista el nuevo objeto, una vez creado no volverá a ejecutarse.
4
Saludos, el tema es en este código:

Citar
[gml]
direction = point_direction(x,y,mouse_x,mouse_y)

if (direction = 0){sprite_index = Spr_Prota_Right}
else if (direction = 90){sprite_index = Spr_Prota_Up}
else if (direction = 180){sprite_index = Spr_Prota_Left}
else if (direction = 270){sprite_index = Spr_Prota_Down}
[/gml]

El concepto está bien, pero la falla está en que sólo va a chequear cuando direction sea 90... pero no el resto de valores que le siguen, 89, 88, 91, 92, ... por tanto unicamente va a cambiar el sprite cuando el cursor esté exactamente arriba del personaje. Y lo mismo con las otras tres direcciones.

Por lo que una forma de adaptarlo sería así:
[gml]
direction = point_direction(x,y,mouse_x,mouse_y);

if (direction <= 45 or direction > 315){sprite_index = Spr_Prota_Right;}
else if (direction > 45 and direction <= 135){sprite_index = Spr_Prota_Up;}
else if (direction > 135 and direction <= 225){sprite_index = Spr_Prota_Left;}
else if (direction > 225 and direction <= 315){sprite_index = Spr_Prota_Down;}
[/gml]
Supongo que debe haber otra forma mejor de calcular las direcciones, pero es la única que me sé de momento.
5
Preguntas y respuestas / Re:nesecito ayuda con codigos
Diciembre 04, 2020, 11:02:03 PM
Manual como tal además de los que postearon no creo que haya, pero puedo recomendarte esta web si no la conoces:
https://www.aprendegamemaker.com/gml/

Hay varios temas que pueden ser útiles.

Y bueno, como siempre la mayoría de información más completa se encuentra en inglés.
6
Preguntas y respuestas / Re:nesecito ayuda con codigos
Diciembre 04, 2020, 05:54:21 AM
Para GM Studio 1 nunca llegó a haber un manual completo en español.
Sólo hay uno para game maker 6, pero creo que no hay un enlace que lleve a él.
7
Saludos, prueba con este:
[gml]
if(!instance_exists(obj_bloque))
{
    var i, posx, posy, bloqueactual;
    i = 10;
    repeat(i)
    {
        posx = random_range(32,416);
        posy = random_range(32,160);
       
        bloqueactual = instance_create(posx,posy,obj_bloque);
       
        with(bloqueactual)
        {
            while (place_meeting(x,y,obj_bloque))
            {
                other.posx = random_range(32,416);
                other.posy = random_range(32,160);
               
                x = other.posx;
                y = other.posy;
            }
        }
       
        with (obj_bloque)
        {
            if !place_snapped(32,8)
            {
                move_snap(32,8);
            }
        }
    }
}
[/gml]
Consiste en que luego de crear una instancia del bloque, se haga un ciclo while que compruebe si esta de ahora (bloqueactual) está en contacto con alguna otra instancia del bloque. De ser así, se vuelven a generar valores al azar de posición en ese rango y se le asignan a la actual, y así repetirá hasta que no tengan contacto, forzando a que queden en distintos lugares.
8
Entonces lo que buscas es un efecto empuje para que el auto arrastre consigo todo lo que toca.

Intenta esto, en el Step de tu objeto pared (supongo que es un cuadrado) ponle este código:
[gml]
if place_meeting(x,y,obj_car)
{
    x += obj_car.hspeed+sign(obj_car.hspeed);
    y += obj_car.vspeed+sign(obj_car.vspeed);
}
[/gml]
Hará que cuando la pared y el auto tengan contacto, la pared se le sumarán las coordenadas de la cantidad de speed del auto, y un poquito más para evitar que se peguen.
9
Saludos.

Es importante que seas específico describiendo el problema y dar información técnica para que sea más fácil ayudar. Por ejemplo pon el enlace del video que mencionas,  el código que es relevante sobre la colisión, etc.
10
Sí, lo que intentas hacer se complica porque requieres de diferentes comportamientos para el personaje al estar parado, o caminando.

Por lo que se necesita una forma de detectar los distintos estados. Una forma sencilla es que le crees variables al jugador, en este caso te recomiendo dos: "mira" y "camina"

"mira" para detectar el lado al que está mirando el jugador
"camina" para detectar si está caminando o no

en el Create
[gml]
mira = 1; // 1- Derecha   0- Izquierda
camina = false; // false- está quieto  true- está caminando
[/gml]

en el Step
[gml]
//se asignan los sprites si camina o no, y donde mira------------
if camina == false
{
    if mira == 1
    {
        sprite_index = spr_der;
    }
    else
    {
        sprite_index = spr_iz;
    }
}
else
{
    if mira == 1
    {
        sprite_index = spr_c_der;
    }
    else
    {
        sprite_index = spr_c_iz;
    }
}
[/gml]

Como ves, se detecta que no está caminando para luego asignar el sprite de quieto según a donde está mirando. Y lo mismo para el caso de cuando sí camina.

Y ahora este código
[gml]
//Movimiento del personaje--------------------
if (keyboard_check(ord("D")))
{
    camina = true;
    mira = 1;
    x += 5;
    image_speed = 0.5;
}

if (keyboard_check(ord("A")))
{
    camina = true;
    mira = 0;
    x -= 5;
    image_speed = 0.5;
}

if (keyboard_check_released(ord("D")))
{
    camina = false;
}
if (keyboard_check_released(ord("A")))
{
    camina = false;
}
[/gml]

Primero cuando se presionan las teclas, mira se vuelve derecha o izquierda según corresponda, y camina se vuelve true para saber que ya cambió de estado.
Y por último al soltar las teclas, camina vuelve a false para volver al estado quieto.

Y luego puedes hacer lo mismo para el movimiento vertical pero usando la "Y"... y sin agregar la variable "mira" porque no es válida para el movimiento vertical, eso te lo dejo a ti.

Y a tu pregunta sobre mezclar el drag drop con código, más que feo es que no es buena idea. El drag & drop es muy limitado y poco flexible, pero lo más importante es que si no sabes muy bien el código que estos bloques usan, podrías estar cambiando variables u otras cosas sin que te enteres, y más avanzado te podrías encontrar con errores inexplicables. Siempre intenta poco a poco ir desprendiéndote de eso, con el código todo se puede hacer.
11
Creo que es lo mismo de esta pregunta
https://www.comunidadgm.org/preguntas-y-respuestas/problemas-de-animacion/msg137740/#msg137740

Game maker usa el sistema de darle velocidad de animación a un sprite usando image_speed y no se puede excluir alguna subimagen dentro.

Así que la única forma es implementar un sistema propio para hacer nuestra animación.

Una forma fácil es crear sprites separados, primero se crea el que contiene sólo los fotogramas que se verán una vez.
Y luego crear otro sprite que contenga los fotogramas que se repetirán.

Por ejemplo haces el movimiento, le dices que pase al primer sprite, y después detectar cuando acaba esa animación (con un evento animation end por ejemplo), y dices que cambie al sprite que será del bucle.
12
Recuerdo que me pasaba eso tiempo atrás, y estoy casi seguro que es porque el teclado no soporta presionar muchas teclas a la vez.

Si es así no sería un tema de game maker, investiga acerca de eso (yo no sé cómo se puede solucionar).
13
Juegos en desarrollo / Re:Tiger Heli Bien
Agosto 18, 2020, 12:51:51 AM
Me gusta mucho considerando que no conozco el juego original, aunque ¿qué hacemos cuando se acaban las balas?
14
Yo nunca he usado RPG Maker y no creo que exista un convertidor automático, pero como opinión personal te sugeriría que portaras manualmente tu proyecto, con el camino difícil aprendes mejor y entrarás rápido en el desarrollo en GM.

Extrae tus recursos de sonido y gráficos e investiga la forma en que se crean juegos RPG en GM. Game maker es un motor global así que puede hacerse cualquier tipo de juego con él.

Respecto al 3D, se dice que GM no tiene mucho soporte y facilidades pero poder se puede.

15
Preguntas y respuestas / Re:Problema con Ataque
Agosto 05, 2020, 07:50:48 AM
Si la alarma nunca se activa, algo debes tener mal, como por ejemplo que asignas la alarma en el Step, debes hacerlo en el Create de la bola para que no vuelva a resetearse el contador.

ev Create
alarm[0] = 60;

ev Alarm[0]
instance_destroy();


Luego para el movimiento, déjalo así:
[gml]
     if point_distance(x,y,obj_Jugador.x,obj_Jugador.y) > 4
    {
        move_towards_point(obj_Jugador.x,obj_Jugador.y,4);
    }
    else
    {
        speed = 0;
        instance_destroy();
    }
[/gml]

Revisa que la distancia entre la bola y el jugador sea mayor a 4 para poder seguirlo, sino pues se para y destruye.