Abril 13, 2019, 09:02:58 PM Ultima modificación: Abril 15, 2019, 05:58:47 PM por Cher3
Buenas, llevo dos semanas atascada intentando programar lo siguiente:
Quiero tener una base en la que esta escrita el nombre del personaje en x coordenada, la imagen del personaje en x coordenada y su texto.
Hasta hay todo bien.
Cuando este haga una pregunta no se como hacer que se modifique lo que diga en el evento draw.
Para que me entendáis mejor:
Quiero hacer un árbol de Preguntas y respuestas que se van dividiendo en caminos.

Esto es lo que tengo:

EVENT CREATE

///MENSAJE

alarm[1] = 140
object_set_visible (obj_mensaje, false);
//mensaje base
Mensaje[0] = "Ey, ¿ Que hace alguien como tú por aquí ?";
Mensaje2[0] = "Pregunta 2";
NPC = "???";
Icono = Icon_Mickael;




///ELECCIONES
alarm[0] = 340
menu_x = x;
menu_y = y;
button_h = 21;

// buttons
button[2] = "-...-";
button[1] = "-¿No deberías saberlo?-";
button[0] = "-No tengo ni idea-";

P_pregunta[0] ="Ey, ¿Que hace alguien como tú por aquí?";

buttons = array_length_1d(button);

menu_index = 0;
last_selected = 0;


------------------------------------------------------------------
PASO


menu_move = keyboard_check_pressed(vk_down) - keyboard_check_pressed(vk_up);

menu_index += menu_move;

if (menu_index < 1) menu_index = buttons - 0;
if (menu_index > buttons - 1) menu_index = 0;

last_selected = menu_index;

----------------------------------------------------
Alarm 0

visible = true

--------------------------------------------
Alarm 1

visible = true

----------------------------------------
DRAW

//Caja de texto

draw_sprite(C_de_texto_VACIO,0,3,395);
draw_set_font(Dialogo);
draw_set_color(c_black);

//Contenido del texto

draw_text_ext(room_width div 2 + 60, 480 ,Mensaje,30,580);

//NO TOCAR LO DE ARRIBA

//NOMBRE:
draw_text_ext(room_width div 7 ,437,NPC, 10,1000);


//Imagen Animada
draw_sprite(Icono,all,73,520);





///ELECCIONES

var i = 0;
draw_set_font(Dialogo);
draw_set_halign(fa_center);
draw_set_color(c_black);

repeat(buttons) {
   draw_set_color(c_black);
   if (menu_index == i) draw_set_color(c_blue);
   draw_text(menu_x, menu_y + button_h * i, button)
   i++;
}


-------------------------------------------------------
PULSACIÓN TECLA A


switch(menu_index) {

   case 2:
      instance_destroy();
      break;
      
   case 1:
   instance_destroy();
      break;
      
   case 0:
   instance_destroy();
      break;
}





Muchas gracias de antemano ^^

#1 Abril 15, 2019, 11:02:52 AM Ultima modificación: Abril 15, 2019, 06:10:47 PM por Johann
El código esta un tanto enredado, veo variables sin un uso especifico, pero voy a asumir que son variables que tendrán un uso a futuro.

Para cambiar el texto dibujado debes cambiar el valor de la variable Mensaje, el lugar para hacerlo seria en tu código para la tecla A.

El código que tienes ahí en ese momento destruye la instancia dibujando el mensaje sin importar que opción se elija, puedes cambiarlo de manera que en su lugar cambie el Mensaje según la opción, por ejemplo:

[gml]PULSACIÓN TECLA A


switch(menu_index) {

   case 2:
      Mensaje = "No tienes nada que decir?";
      break;
     
   case 1:
      Mensaje = "Y por que habría de saberlo?";
      break;
     
   case 0:
      Mensaje = "Estas perdido?";
      break;
}[/gml]

Ahora bien, el problema con dejarlo así seria que ahora no tienes como eliminar el mensaje, yo recomendaría usar una variable para guardar la posición en el árbol de dialogo en la que estas, de manera que la Tecla A avance el dialogo y lo destruya si se encuentra al final.

Entonces agregaríamos la variable al evento create:

[gml]EVENT CREATE

///MENSAJE

alarm[1] = 140
object_set_visible (obj_mensaje, false);
//mensaje base
Mensaje[0] = "Ey, ¿ Que hace alguien como tú por aquí ?";
Mensaje2[0] = "Pregunta 2";
NPC = "???";
Icono = Icon_Mickael;
Dialogo_Pos = 0;[/gml]

Y cambiamos el evento de Tecla A para que tenga en cuenta dicha variable:

[gml]PULSACIÓN TECLA A

if Dialogo_Pos == 0 {
Dialogo_Pos++;
   switch(menu_index) {
   
      case 2:
         Mensaje = "No tienes nada que decir?";
         break;
         
      case 1:
         Mensaje = "Y por que habría de saberlo?";
         break;
         
      case 0:
         Mensaje = "Estas perdido?";
         break;
  }
}
else if Dialogo_Pos == 1 instance_destroy();[/gml]

Con eso ademas podrás poner más mensajes si así lo quieres:

[gml]PULSACIÓN TECLA A

if Dialogo_Pos == 0 {
Dialogo_Pos++;
   switch(menu_index) {
   
      case 2:
         Mensaje = "No tienes nada que decir?";
         break;
         
      case 1:
         Mensaje = "Y por que habría de saberlo?";
         break;
         
      case 0:
         Mensaje = "Estas perdido?";
         break;
   }
}
else if Dialogo_Pos == 1 {
  Mensaje = "No confío en los forasteros.";
  Dialogo_Pos++
}
else if Dialogo_Pos == 2 instance_destroy();[/gml]

Otra cosa que que tal vez quieras es que las opciones se dejen de dibujar una vez que hayas elegido una respuesta, en ese caso usaríamos una variable de control para determinar cuando se dibujan.

Agregamos la variable en el evento create:

[gml]///MENSAJE

alarm[1] = 140
object_set_visible (obj_mensaje, false);
//mensaje base
Mensaje[0] = "Ey, ¿ Que hace alguien como tú por aquí ?";
Mensaje2[0] = "Pregunta 2";
NPC = "???";
Icono = Icon_Mickael;
Dialogo_Pos = 0;
Mostrar_Opciones = 1;[/gml]

Cambiamos el valor de la variable cuando elegimos una opción:

[gml]PULSACIÓN TECLA A

if Dialogo_Pos == 0 {
Dialogo_Pos++;
Mostrar_Opciones = 0;
   switch(menu_index) {
   
      case 2:
         Mensaje = "No tienes nada que decir?";
         break;
         
      case 1:
         Mensaje = "Y por que habria de saberlo?";
         break;
         
      case 0:
         Mensaje = "Estas perdido?";
         break;
   }
}
else if Dialogo_Pos == 1 {
   Mensaje = "No confío en los forasteros";
   Dialogo_Pos++
}
else if Dialogo_Pos == 2 instance_destroy();[/gml]

Y agregamos la condición al evento Draw para que solo dibuje las opciones cuando queremos:

[gml]///ELECCIONES

if Mostrar_Opciones == 1 {
   var i = 0;
   draw_set_font(Dialogo);
   draw_set_halign(fa_center);
   draw_set_color(c_black);

   repeat(buttons) {
      draw_set_color(c_black);
      if (menu_index == i) draw_set_color(c_blue);
      draw_text(menu_x, menu_y + button_h * i, button)
      i++;
   }
}[/gml]

Muchísimas gracias , me ha servido de mucho funciona perfectamente ^^