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

16
Cita de: BssString en Octubre 10, 2018, 12:32:05 AM
Hola jpsaenz

Estás complicando las cosas.
En el draw event del obj_john dibuja el sprite de la exclamación cuando el player esté cerca y listo..

Draw Event
draw_self()
If distance_to_object(obj_player) < 3 {
draw_sprite(sprite_exclamacion,x,y-20)
}


Hola, gracias por el consejo.

EN DRAW del objeto no jugador:


/// DRAW [!]
draw_self();
if distance_to_object(obj_john) < 3 {
draw_sprite(spr_star,0,x,y-20);
};


Me da un

CitarTrying to draw non-existing sprite.
at gml_Object_obj_transp_Draw_0 (line 2) - draw_self();

...por supuesto, "spr_star" SÍ existe!!!

Alguna idea?

gracias!
17
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!
18
Resubida la versión actual del proyecto, con ella la intro está terminada.
19
Hola Clamud,

Cita de: Clamud en Agosto 08, 2018, 05:28:49 AM
Se ve bien y tiene varios acertijos. No he logrado resolver el último objetivo, ¿es posible alcanzarlo?

Gracias por probarlo. Sí, es posible alcanzar el último objetivo (sin embargo la casilla de info que se lee arriba con la información de los "objetivos" cumplidos no funciona. Simplemente es un reset (lo cual tiene su lógica narrativa). Estoy avanzando bastante, en estos días voy a subir una versión actualizada.

Saludos!
20
Hola Clamud,

gracias por contestar!

Cita de: Clamud en Agosto 08, 2018, 05:13:09 AM
El último ejemplo que has escrito debería funcionar jpsaenz. Lo importante es no usar comillas.

No funciona, ni con, ni sin comillas.

Citar
El código no es muy extenso, creo que así es más fácil de leer
[gml]
var choque;
choque = colision_rectangle (x,y,x+100,y+100,OBJ_PUERTA,false,false);
if (choque)
{
  if (estado == cerrado) {
    scr_puertacerrada();
  }
  else if (estado == abierto) {
    scr_puertaabierta();
  }
}
[/gml]

jejej... claro, pero así no estoy poniendo el nombre del Script en una variable, no? El código que puse más arriba es solo un ejemplo simplificado; en el código real sucede lo siguiente:

Tengo un sistema de diálogos, y en el evento correspondiente al texo de cada NPC quiero poner algo así

[gml]
/// TEXTO NPC#1
msg[0] = "Hola qué tal, esta es la línea #1";
msg[1] = "Y esta es la linea #2, aquí se ejecuta el script";
msg[2] = "Linea final";

final = 2;
actionline = 0;
scriptToCall = "scr_script_npc1";
[/gml]

Después, en el objeto que controla los diálogos, quiero una línea que ejecute el script en cuestión, que puede llamarse "scr_script_np1", "scr_script_npc2"... o como sea:

[gml]
if (indice = referencia.actionline) {
   script_execute(referencia.scriptToCall);
[/gml]

Bueno, eso. He intentado con comillas, sin comillas, puse (no con muchas esperanzas) hasta un "referencia.scriptToCall();" en lugar de "script_execute" - pero nada funciona ...

De todas formas, gracias por los aportes!

pd: Por cierto, ¿Cuál es la diferencia entre "script_execute(nombredelscript)" y "nombredelscript();"?
21
Cita de: Arcadian en Agosto 06, 2018, 09:55:30 PM
Pues no, no me has entendido.

script_objetivo es un valor real, no la variable. La variable es una string (script_nombre).

ok, pero si "script_objetivo" es el nombre real del script, no tiene sentido hacerlo así.

Yo necesito poder ejecutar un script (u otro) dependiendo de algunos factores cuyo resultado vuelco en una variable.

Voy a inventar un ejemplo fácil: hay una puerta, al chocarse el jugador contra ella, se ejecuta un script. El estado de la puerta (cerrado/abierto) está guardado en una variable, y qué script ha de ejecutarse depende de ese estado.

O sea, lo que quiero hacer es algo como lo siguiente:

if (estado = cerrado) {
    scripttocall = scr_puertacerrada;
    } else if (estado = abierto) {
    scripttocall = scr_puertaabierta;
   }

var choque
choque = colision_rectangle (x,y,x+100,y+100,OBJ_PUERTA,false,false);
if (choque){
    script_execute (scripttocall);
    }


22
Hola Arcdadian, muchas gracias por responder.

Cita de: Arcadian en Agosto 06, 2018, 07:12:14 AM
script_objetivo = asset_get_index(script_nombre);  //  script_nombre viene a ser nuestra variable
script_execute(script_objetivo);


hmmm... imagino que habrás querido decir que "script_nombre" es el nombre del script y que "script_objetivo" es nuestra variable. Aún así no funciona  :(

Saludos!
23


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]
24
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!

25
Solucionado! Me faltaba asignarle un Hitbox al personaje. Una respuesta al mismo problema en otro hilo trajo la solución.

Saludos!
26
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
27
Cita de: Hezz en Agosto 03, 2018, 12:48:23 AM

En el objeto de tu jugador (digo el del jugador porque lo más probable es que en los niveles que necesites ese efecto va a estar presente el jugador, quizás en el menú principal no lo necesites), en el evento create, podés poner:
instance_create(0,0,[objeto]);
y eliminar el objeto de la room donde editás el nivel.

Suena bien. "0,0," es x,y? Con respecto al punto 0,0 de la room (presumo que arriba a la izquierda), o son las coordenadas del jugador? (en cuyo caso no serviría puesto no quiero que este efecto se mueva con el jugador si no que permanezca fijo sobre toda la escena)

De todas formas probaré a ver qué pasa ;-)

Gracias!
28
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
29
Funciona perfectamente - muchas gracias!

Saludos,
Juan Pablo
30
Hola Hezz!

muchas gracias por la respuesta. Voy a probarlo!

Saludos!
Juan Pablo