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

31
Preguntas y respuestas / Duda con variables y su uso
Octubre 11, 2014, 02:43:48 AM
Hola a todos. He seguido este tutorial del usuario HeartBeast en youtube:

https://www.youtube.com/watch?v=ZFX7IHhZw7g

He conseguido que todo funcione tal y como está explicado. Pero no entiendo como se consigue que GMS sepa a que función se refiere cada variable. Intentaré concretar mi duda con el código.

Tengo una room muy simple, con un objeto "suelo" sólido que hace de suelo extendiéndose y haciendo varias plataformas a diferentes niveles.

Tengo un objeto/personaje, que en mi caso se llama "chuck". Puede moverse a derecha/izquierda y saltar. Y tiene estos 2 eventos:

1 Create

/// Declaración de propiedades y variables

grav = 1.1; // Gravedad
spd = 4;    // Velocidad
jspd = 12;  // Velocidad de salto
hspd = 0;   // Velocidad horizontal
vspd = 0;   // Velocidad vertical


2 Step

/// Movimientos y colisiones

var izquierda = keyboard_check ( vk_left );
var derecha = keyboard_check ( vk_right );
var salto = keyboard_check ( ord ("Z") );

// Comprueba contacto con suelo
if ( place_meeting (x,y+1,obj_parentsolid)) {
    vspd = 0;
   
    // Saltando
    if ( salto ) {
        vspd = -jspd;
    }
} else {
    // Gravedad
    if ( vspd < 6 ) {
        vspd += grav;
    }
}

// Mover a derecha
if ( derecha ) {
    hspd = spd;
}

// Mover a izquierda
if ( izquierda ) {
    hspd = -spd;
}

// Chequea si no se puede mover
if ( (!izquierda && !derecha) || ( izquierda && derecha )) {
    hspd = 0;
}

// Colisión horizontal
if ( place_meeting ( x+hspd,y,obj_parentsolid )) {
    while ( !place_meeting ( x+sign(hspd),y,obj_parentsolid )) {
        x += sign(hspd);
    }
    hspd = 0;
}

// Movimiento horizontal
x += hspd;

// Colisión vertical
if ( place_meeting ( x,y+vspd,obj_parentsolid )) {
    while ( !place_meeting ( x,y+sign(vspd),obj_parentsolid )) {
        y += sign(vspd);
    }
    vspd = 0;
}

// Movimiento vertical
y += vspd;
}


Mi duda es, por ejemplo en la sección "Mover a derecha". Como sabe GMS que cuando pongo hspd, me refiero a la función "hspeed"?? Y que spd es "speed"?? Es que no logro entender como es que funciona, y si no lo entiendo... no he aprendido nada.

Una explicación para dummies??
Gracias y un saludo.
32
Gracias Ruben :)
33
Gracias Ruben. Tu código funciona perfecto  ;)

La verdad es que estaba basandome en un tutorial para GM8 y quizá algo ha cambiado entre versiones, y por eso no me funcionaba.

Según ese tutorial, el ini había que crearlo primero para poder abrirlo ( leer/escribir ) en GM. Pero veo que tu código se encarga de hacerlo.

El show_message lo utilizo solo para pruebas, tampoco es de mi agrado. Pero así no tengo que añadir evento draw para ver el resultado/estado de algún valor.

Donde se guarda el ini ( archivo como tal )??

Gracias y un saludo.
34
Hola makeros. Estoy practicando el uso de archivos ini, para utilizarlo en un proyecto pero no soy capaz de hacerlo funcionar.

Tengo un archivo ini muy básico puesto en include files con el nombre "configuracion.ini", que contiene solo una sección y 2 datos:

Citar
[config]
nombre=franco
edad=387

Y un objeto en el room que tiene el siguiente código:

Citar
ini_open ("configuracion.ini");

nombre = ini_read_string ("config","nombre","Eduardo");
edad = ini_read_real ("config","edad",30);

ini_write_string ("nuevaseccion","nombre",nombre);
ini_write_real   ("nuevaseccion","edad",edad);

show_message (nombre);
show_message (edad);

ini_close();

El primer problema, es que cuando lee el ini, no me coje el dato nombre y pone el "Eduardo" asignado por defecto. Lo mismo ocurre con el dato edad. Es decir, como si no hubiese nada en el ini ?¿

El segundo problema viene al intentar escribir el ini. No hace nada. Después de ejecutar el programa, abro el ini para ver si se ha escrito la nueva sección y no lo ha hecho.

Que estoy haciendo mal??
Gracias y un saludo.
35
Cita de: 7sixerCF en Julio 14, 2014, 06:13:24 PM
Bueno suponiendo que tienes 1 objeto llamado "enemigo_obj" y quieres que este se genere en una zona aleatoria de la habitación es muy simple solo necesitas hacer lo siguiente:

Generamos una posición aleatoria con ayuda de random de la siguiente manera:

px=random(room_width); //se genera un numero aleatorio entre 0 y el ancho de la habitación
py=random(room_height); //lo mismo pero con la altura


una vez generado los datos al azar procedemos a posicionara  tu enemigo en la habitación de la siguiente forma:


instance_create(px,py,enemigo_obj);


si no sabes como posicionar estos elementos en tu juego deberías aprender GML generalmente no se da soporte para la interfaz D&D (arrastrar y soltar) de GM

Y si quieres que además de unas coordenadas aleatorias, sea en un lapso de tiempo aleatorio ( por ej: de 1 a 5 segundos )??
36
Buenos días.

El código ha quedado tal que así:


// Switch que determina la posición del jugador

switch (pos)
{
    case 1: { x = 346; y = 225; break; }
    case 2: { x = 410; y = 225; break; }
    case 3: { x = 346; y = 290; break; }
    case 4: { x = 410; y = 290; break; }
}

// Acciones al pulsar las teclas

if keyboard_check_pressed(ord('Q'))
{
pos = 1;
sprite_index=spr_arriba_izq;
image_index += 1;
    if image_index > 0
    { alarm[0] = room_speed * 0.25 }
}

if keyboard_check_pressed(ord('P'))
{
pos = 2;
sprite_index=spr_arriba_der;
image_index += 1;
    if image_index > 0
    { alarm[0] = room_speed * 0.25 }
}

if keyboard_check_pressed(ord('A'))
{
pos = 3;
sprite_index=spr_abajo_izq;
image_index += 1;
    if image_index > 0
    { alarm[0] = room_speed * 0.25 }
}

if keyboard_check_pressed(ord('L'))
{
pos = 4;
sprite_index=spr_abajo_der;
image_index += 1;
    if image_index > 0
    { alarm[0] = room_speed * 0.25 }
}


He modificado el tiempo de la alarma, para que se ajustase a la velocidad de golpeo que buscaba.

Funciona perfecto salvo por un detalle, ahora el personaje golpea al mismo tiempo que se desplaza a una nueva posición. Quizá no he sabido explicar bien el gameplay. Como una imagen vale más que mil palabras, dejo un video del juego original en el que me estoy basando.

https://www.youtube.com/watch?v=zD2HIxIX7X4

Gracias y un saludo.
37
Cita de: penumbra en Julio 08, 2014, 02:50:38 AM
No afecta porque no es una pausa ni estoy modificando la velocidad de la habitación. Es sólo un valor de lectura para comenzar una cuenta regresiva a partir del momento en que la tecla se presiona.

Ok. Mañana lo modifico y te comento el resultado... que necesito dar una cabezada  ;D
Muchas gracias y un saludo.
38
Viste la edición de mi anterior mensaje? Modifiqué el código, aunque no es que esté muy "pulido". Es tuyo se ve mucho mejor, pero tengo una duda.

Al utilizar la función "room_speed" no afectará también esa pausa de 0.5 segundos a los enemigos y resto de objetos ?

Gracias y un saludo.
39
Gracias por responder, Penumbra.

Lo primero, el código que se repetía en cada if lo he puesto en create tal como me dijiste y funciona perfecto.

En cuanto a lo de añadir más código, para comprovar la posición y golpear. He añadido esto antes de los if que ya tenía, pero solo funciona cuando pulso 'L' y además el "golpeo" es tan rápido que casi ni se vé:

=============

if keyboard_check_pressed(ord('Q')) and posicion_soldado=1
{
image_index=1;
}
else
{
image_index=0;
}

if keyboard_check_pressed(ord('P')) and posicion_soldado=2
{
image_index=1;
}
else
{
image_index=0;
}

if keyboard_check_pressed(ord('A')) and posicion_soldado=3
{
image_index=1;
}
else
{
image_index=0;
}

if keyboard_check_pressed(ord('L')) and posicion_soldado=4
{
image_index=1;
}
else
{
image_index=0;
}

=================

Que hago mal?  :-[
Gracias y un saludo.

EDITO:

Ya he conseguido que funcione como quiero, con este código:

===========

// Los siguientes if, comprueban la posicion del personaje y golpea

if posicion_soldado=1 and keyboard_check_pressed(ord('Q'))
{
image_index=1;
}
if keyboard_check_released(ord('Q'))
{
image_index=0;
}

if posicion_soldado=2 and keyboard_check_pressed(ord('P'))
{
image_index=1;
}
if keyboard_check_released(ord('P'))
{
image_index=0;
}

if posicion_soldado=3 and keyboard_check_pressed(ord('A'))
{
image_index=1;
}
if keyboard_check_released(ord('A'))
{
image_index=0;
}

if posicion_soldado=4 and keyboard_check_pressed(ord('L'))
{
image_index=1;
}
if keyboard_check_released(ord('L'))
{
image_index=0;
}


// Los siguientes if, mueven el personaje a las 4 posiciones posibles
if keyboard_check_pressed(ord('Q'))
{
x=346;
y=225;
sprite_index=spr_arriba_izq;
posicion_soldado=1;
}

if keyboard_check_pressed(ord('P'))
{
x=410;
y=225;
sprite_index=spr_arriba_der;
posicion_soldado=2;
}

if keyboard_check_pressed(ord('A'))
{
x=346;
y=290;
sprite_index=spr_abajo_izq;
posicion_soldado=3;
}

if keyboard_check_pressed(ord('L'))
{
x=410;
y=290;
sprite_index=spr_abajo_der;
posicion_soldado=4;
}

===============

Gracias por tu ayuda Penumbra.
Un saludo.
40
Hola makeros,

Estoy intentando hacer mi primer juego completo en GM Studio. Es muy sencillo pero estoy atascado con el movimiento de ataque del jugador.

El jugador tiene 4 posiciones posibles, utilizando las teclas:

Q= arriba izquierda
P= arriba derecha
A= abajo izquierda
L= abajo derecha

Cada posición tiene su sprite y cada sprite del jugador tiene 2 imágenes. La 0 es con un martillo levantado y la 1 es con el martillo golpeando hacia abajo.

En cuanto al movimiento, no existe como tal. El jugador tiene que cambiar instantaneamente de posición cuando pulsas una de las teclas Q,A,P,L. Cuando cambias de posición, el sprite siempre tiene que mostrar la imagen 0 ( martillo arriba ). Pero por ejemplo, si el jugador ya está en la posición Q ( arriba izquierda ) y vuelves a pulsar Q, debería cambiár el sprite a la imagen 1 ( martillo abajo ) para que haga UN golpeo. Pero no me sale.

Consigo que se mueva ( o salte ) a cada una de esas 4 posiciones con su sprite correspondiente. Pero no logro que dé UN "golpe". Lo máximo que he conseguido es que se quede el sprite golpeando sin parar, hasta que lo hago cambiar de posición.

En el objeto, únicamente tengo 2 eventos:

Create: código, con el que creo el objeto en las coordenadas de inicio y una variable "posición_soldado" para saber en cual de las 4 posiciones está.

Step: el siguiente código con el que checkeo las teclas y muevo al jugador

==============================
if keyboard_check(ord('Q'))
{
x=346;
y=225;
sprite_index=spr_arriba_izq;
image_index=0;
image_speed=0;
posicion_soldado=1;
}

if keyboard_check(ord('P'))
{
x=410;
y=225;
sprite_index=spr_arriba_der;
image_index=0;
image_speed=0;
posicion_soldado=2;
}

if keyboard_check(ord('A'))
{
x=346;
y=290;
sprite_index=spr_abajo_izq;
image_index=0;
image_speed=0;
posicion_soldado=3;
}

if keyboard_check(ord('L'))
{
x=410;
y=290;
sprite_index=spr_abajo_der;
image_index=0;
image_speed=0;
posicion_soldado=4;
}

===============================

Agradecería cualquier ayuda.
Un saludo.
41
Preguntas y respuestas / Re:Duda novato total
Julio 04, 2014, 02:40:51 AM
Me refería a esas pestañas "extra" que he visto en algunos videos, tal como dice penumbra. Entiendo por tu comentario que no son necesarias para trabajar con GM.

Si alguien sabe el procedimiento exacto para añadir esas pestañas y quiere compartirlo, ya sabe  ;D . Por curiosidad, nada más.

Gracias a los dos y un saludo.

Edito: He modificado el título del post, por si alguien tuviese la misma duda y lo pueda localizar.

Edito con solución: Finalmente localicé un video que explicaba como hacerlo. Descargas las librerias ( adjuntas en este mensaje ) y descomprimirlas en:
C:\Users\"aquí va tu nombre de usuario"\AppData\Roaming\GameMaker\lib
Esto es en win7, en otros sistemas no sé donde se encuentra este directorio. Aunque no debe ser dificil localizarlo.
Abre ahora GameMaker y verás que tienes más pestañas de eventos para agregar a los objetos.
42
Hola gamemakeros.

Llevo tan solo unas semanas metido con el game maker y viendo tutoriales de youtube. Me he fijado que en muchos videos, en la ventana "object properties", aparecen más opciones de las que tengo yo por defecto en game maker ( move, main 1, main 2, control, score, extra y draw). De donde salen esas opciones y para que sirven?

Gracias anticipadas y un saludo.

Edito con solución:

Finalmente localicé un video que explicaba como hacerlo. Descargas las librerias ( adjuntas en este mensaje ) y descomprimirlas en:

C:\Users\"aquí va tu nombre de usuario"\AppData\Roaming\GameMaker\lib

Esto es en win7, en otros sistemas no sé donde se encuentra este directorio. Aunque no debe ser dificil localizarlo.

Abre ahora GameMaker y verás que tienes más pestañas de eventos para agregar a los objetos.