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.

Temas - jpsaenz

1
Hola!

Quiero hacer unas lámparas que iluminen una room, pero necesito que uno de los objetos tenga una profundidad menor a la iluminación. En concreto es una estación de metro, en donde se debería ver al tren por delante de la iluminación, pero no logro realizar esto. La iluminación funciona, pero sobre todos los objetos de la room, sin importar el valor de profundidad que le asigne a cada objeto ("depth"). Creo que en la imagen adjunta puede apreciarse bien lo que quiero decir.

Alguien sabe como solucionar este problema?

Muchas gracias!
2
Hola,

estoy elaborando un sistema de diálogos que en principio funciona correctamente: el objeto "dialogable" se activa al pasar el jugador delante de él y oprimir [SPACE], y luego el jugador puede paginar hasta llegar al final. El código es simple:

CREATE EVENT

/// Sistema de dialogo
texto[0] = "";
mostrar = false;
pagina = -1;


STEP EVENT

/// activa/desactiva según distancia
if (keyboard_check_pressed(vk_space) and distance_to_object(obj_player)<10) {
    mostrar = true;
    }

if (distance_to_object(obj_player)>10) {
    mostrar = false;
    pagina = -1;
    }

/// Sistema de dialogo, cambio de pagina

if (keyboard_check_pressed(vk_space) and mostrar) {

    if (pagina = -1) {
    global.stop = true; //desactiva modo jugador
    }
       
    if (pagina+1 < array_length_1d(texto)) pagina++;
   
// Termina el diálogo - reinicia variables

    else {
    mostrar = false;
    pagina = -1;
    global.stop = false; //reactiva modo jugador
    }
}


DRAW EVENT

/// Parámetros del texto
if (mostrar) {
...
draw_text(x,y,texto[pagina]);
}


CREATION CODE EVENT

texto[0] = "Linea 1";
texto[1] = "Linea 2";
texto[2] = "Linea 3";
texto[3] = "Linea 4";


Ahora bien, quiero tener la opción de apretar una tecla u otra en un momento determinado y que el dialogo cambie. Es decir, por ejemplo en la línea 2 que ponga por ejemplo "Oprime [SPACE] para L3A o [ENTER] para L3B" y que según se oprima una u otra tecla, cambie el valor de la siguiente línea de texto.

Intenté algo como lo que sigue:

En el STEP del sistema de dialogos:

if (keyboard_check_pressed(vk_space) and mostrar) {

    if (pagina = 2) {
        if (keyboard_check_pressed(vk_enter)) {
        condicion = true;
        keyboard_key_press (vk_space)
        }
        }
       
    if (pagina+1 < array_length_1d(texto)) pagina++;
   
...
}


y en el bloque de diálogos:

texto[0] = "Linea 1";
texto[1] = "Linea 2";
texto[2] = "Oprime [A] para L3A o [B] para L3B";

if (condicion) {
texto[3] = "L3A";
} else {
texto[3] = "L3B";
}


pero no funciona. No me da ningún error, simplemente nada sucede al oprimir [ENTER] en el momento indicado.

Hay alguna forma de hacer esto?

Gracias!
3
Hola!

tengo otro problema de la serie "cosas que deberían ser una soberana estupidez y que sin embargo no me funcionan"... (soy un feroz proncipiante, gracias por la paciencia)

Quiero simular una conversación muy básica de whatsapp, cuya mecánica consiste en que el jugador oprima la barra espaciadora y "envíe" una sentencia establecida y luego deba esperar unos segundos para recibir una respuesta. Esto se repite tres veces.

Para ello tengo un obj_whatsapp (con el sprite de un celular corriendo el programa de mensajería) con siete subimagenes, cada una de las cuales representa una línea del diálogo simulado.

En la variable "wpchat" guardo el numeral correspondiente a la acción de oprimir la barra espaciadora y con ello intento controlar el cambio de las subimágenes:

[EVENTO CREATE]

[gml]wpchat = 0;[/gml]

[EVENTO STEP]

[gml]/// Conversación de Whatsapp

if (keyboard_check_pressed(vk_space)){
wpchat++
}

//#1
if (wpchat = 1) {
image_index=1;
alarm[0] = room_speed*3;
}

//#3
if (wpchat = 2) {
image_index=3;
alarm[1] = room_speed*3;
}


//#5
if (wpchat = 3) {
image_index=5;
alarm[2] = room_speed*3;
}[/gml]

[ EVENTO ALARM[n] ]

[gml]image_index = n;[/gml]

Los cambios de sprite directos funcionan, pero las alarmas no (también puse "obj_whatsapp.image_index = x": tampoco funciona)

En qué me estoy equivocando?

Gracias!
4
Hola,

Tengo un problema con intance_destroy() y no puedo solucionarlo. En el foro hay un hilo similar pero tampoco me ha resultado de ayuda.

Cuando mi personaje jugador pasa delante de ciertos objetos quiero que aparezca un pequeño sprite (en este caso un "[!]") sobre el objeto en cuestión para indicar una posibilidad de interacción, y que dicho símbolo desaparzca cuando el personaje se aleja.

El código que utilizo es el siguiente, en el objeto con el cual deseo interactuar:

EN CREATE:


var subtexpr;


EN STEP:


if  distance_to_object(obj_john)<3 {
    subtexpr = instance_create(x+7,y-15,obj_star);
};

if  distance_to_object(obj_john)>3 {
    with (subtexpr) {
    instance_destroy();
    }
};


Así como está, el código me da un error en la línea

    with (subtexpr) {


Si hago un


    with (obj_star) {


funciona bien, siempre y cuando no tenga más de un objeto para interactuar en la room, de lo contraroi funciona con el primero y los demás no (es lógico, pues el primer script en ejecutarse detecta que el jugador está a más de 3px de distancia del primer objeto y destruye el [!] en el momento de ser creado.

También he probado sin "with ()", es decir, intentando destruir el objeto creado con su propia ID (supuestamente, según el manual (https://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/instance%20functions/instance_destroy.html), al crear el objeto con

variable = instance_create()

debería poder hacer un

instance_destroy(variable);

...pero TAMPOCO funciona.

Lo que necesito es, al alejarse el jugador, destruír la instancia en cuestión, y no TODOS los objetos "obj_star" de la habitación.

¿Cómo puedo realizar esto?

Gracias!
5


Dzor


Otro


GM: Studio

Dzor ("Thor" en nórdico antiguo) es mi primer proyecto; nunca antes había programado nada y de hecho hasta hace dos semanas no conocía el GameMaker. El juego será una aventura gráfica y aunque se encuentra en una fase tempranísima, quisiera que me den su opinión.

Lo que les muestro tiene una duración de entre 2 y 3 minutos pero creo que ya alcanza para dar una idea de para donde quiero apuntar. No quiero contar demasiado pues me interesa que me comenten si se entiende la jugabilidad que planteo, así sin demasiadas explicaciones.

Desde ya, muchas gracias por mirarlo y muchas gracias por vuestra crítica constructiva!

pd: Mi idea, por supuesto, es aprender a programar mientras lo voy haciendo; tengan en cuenta que soy un principiante feroz!




Versión instalable:
https://drive.google.com/file/d/1iiPY0Hbr5yifJMrblc0qafhpCeOYFRx2/view?usp=sharing
Versión no-instalable:
https://drive.google.com/file/d/1Nr6btN44TeT8TgkSq1Jt_ok3xOc1iCCm/view?usp=sharing


[EDIT: Resubida versión actual del proyecto - noinstall]
6
Hola!

Intenté hacer algo como esto:

script = "scr_script";
script_execute ("script");


pero no funciona. Si entrecomillo el nombre de la variable, GMS misteriosamente ejecuta el primer script de la lista (es decir, puedo escribir "script_execute ("cualquiercosa")" y aquí me refiero a poner literalmente cualquiercosa, y se ejecutará el primer script que tenga en la lista de scripts (ver adjunto: en este caso, por ejemplo "scr_lamp_on_off")

Si no entrecomillo el nombre de la variable, GMS busca un script con ese nombre y (obviamente) no lo encuentra.

Existe alguna forma de ejecutar un script cuyo nombre dependa de una variable?

Saludos!

7
Hola,

mi personaje se mueve hacia los lados y debe detenerse al colsionar con una puerta que se encuentra a su derecha. El problema es que al hacerlo, queda encalldo y ya no se mueve hacia la izquierda. El obj de la puerta es sólido, el evento de colisión lo lleva el personaje.

Analizando la situación he notado que el sprit de "dirección izquierda" del personaje tiene tres pixeles más sobre el costado derecho que el sprit de "dirección derecha"; ¿quizás a esto se deba el encallamiento? En la imagen adjunta se puede apreciar mejor lo que intento explicar. (casi todos los sprits del personaje tienen pixeles invisibles a los costados para que quepan todos los movimientos)

He probado con otro sprit y el problema desaparece. También he intentado hacer que al chocar el personaje retroceda un poco (http://www.comunidadgm.org/preguntas-y-respuestas/como-hacer-que-personaje-retroceda-al-colisionar/msg111042) pero sin éxito (no retrocede)

Alguna idea?

saludos!
Juan Pablo
8
Hola Gamemakerinos!

estoy empezando con el Game Maker y me surgió una dificultad que no pude resolver: Al organizar los elementos de una room, tengo un objeto posicionado en la capa superior (o sea, su profundidad está sobre encima de todos los demás), que funciona como velo (en realidad es solo una imagen negra con una opacidad baja (alpha=200) para que al encender o apagar la luz la habitación se ilumine o se oscurezca. Funciona perfectamente, pero:

1. Es esta una buena forma de lograr ese efecto, o existe otra mejor?
2. una vez posicionado la capa, ya no puedo manipular ninguno de los objetos de la room (están todos "debajo" de ella y al cliquear en cualquier parte, marco la capa y no el objeto deseado, ver imagen adjunta)

Existe alguna forma de solucionar esto, o debo quitar la capa cada vez que quiera mover otro objeto de la room?

Saludos y gracias!
Juan Pablo
9
Hola grupo!

estoy dando mis primeros pasos en gamemaker y no puedo resolver un problema que seguramente es sencillícimo de resolver.

Mi personaje tiene 7 sprits

2x caminando (iz/der)
3x parado (iz/der/frente)
2x mirando (arriba/iz y arriba/der)

con los eventos "press <x>" y "realease <x>" (en donde x=right, up, left, down) logro que cambie los sprits correctamente y se mueva hacia los lados. Al apretar "down" mira al frente, y al apretar "up" debe mirar hacia "arriba a la izquierda" o "arriba a la derecha", según la dirección en la que se encuentre mirando en ese momento.

Cómo hago para controlar hacia qué dirección está mirando en el momento de apretar "up"?

Me imagino que será algo así como

if (sprite = sprite.right) {
object_set_sprite = sprite.upright
}


pero no doy con las líneas de código apropiadas.

Muchas gracias!