Please login or register.

Login with username, password and session length
Advanced search  

News:

Forum rules - please read before posting, it can save you a lot of time.

Pages: 1 2 3 [4]

Author Topic: Empezando y con problemas.  (Read 16387 times)

0 Members and 1 Guest are viewing this topic.

HelLRaiseR

  • I don't want to make a Monkey Island clone :(
  • Moderator
  • Frequent poster
  • *****
  • Karma: 4
  • Offline Offline
  • Posts: 270
    • View Profile
    • Adventure Box Studios
Re: Empezando y con problemas.
« Reply #45 on: January 12, 2011, 03:34:14 PM »

A ver, los dialogos:
Estudia este código que te pongo, es muy simple, cuando lo tengas claro seguimos con conversaciones dependientes de determinadas respuestas y demas.

Por supuesto, esta función debe ser llamada, cuando se desencadene el evento hablar:

on "Talk"
{
    Dialogo();
}

Otra cosa, en este hilo se están mezclando un montón de cosas, a partir de ahora cada cosa nueva que te surja, ponla en un post nuevo, asi no se mezclan temas y es mas facil encontrar las cosas para la gente que venga después. En el titulo pon algo significativo, como por ejemplo "Dudas sobre los dialogos"


Code: [Select]
function Dialogo()
{
  var Responses;
  var Selected;

  var Loop = true;

  while(Loop)
  {
// preparamos las frases, hablar_barco y hablar_coche lo usamos para saber si ya ha hecho la pregunta con anterioridad y cambiar la foma de hacerla
// en función de si se ha hablado o no
// Se entiende que previamente estas variables estan declaradas globalmente e inicializadas a false, o sea:
// global hablar_barco = false; // y lo mismo con hablar_coche
// De esta forma, la primera vez que se ejecute el código, se dice la primera frase y se indica que ya se ha hablado para que las sucesivas veces
// Salga lo de "Vuelveme a contar"

if (!hablar_barco)
Responses[0] = "Hablame del barco";
else
Responses[0] = "Vuelveme a contar lo del barco");
if (!hablar_coche)
Responses[1] = "Hablame del coche";
else
Responses[1] = "Vuelveme a contar lo del coche");

    // Creamos el cuadro de conversación con las frases que hemos preparado
    Game.AddResponse(0, Responses[0]);
    Game.AddResponse(1, Responses[1]);

    // Ahora lo presentamos en pantalla para que el jugador seleccione una, el resultado se almacena en Selected
    Selected = Game.GetResponse();

    // El actor repite lo que hemos seleccionado
    actor.Talkt(Responses[Selected]);

   // Ahora el personaje contesta en función de la pregunta que se ha hecho y si ya se habia hecho antes o no
    if(Selected==0) // Pregunta de los barcos
    {
if (!hablar_barco)
{

personaje.Talk("Los barcos flotan");
hablar_barco=true;
}
else
{
personaje.Talk("Como ya te dije, los barcos flotan, excepto si tienen un agujero, claro");
}
}
    if(Selected==1) // Pregunta de los coches
    {
if (!hablar_barco)
{

personaje.Talk("Los coches van rodando");
hablar_barco=true;
}
else
{
personaje.Talk("Como ya te dije, los coches van rodando, excepto por cuestiones de gasolina, pinchazos y similares, por supuesto");
}
}
}
Logged
Regards,

    Fernando

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Empezando y con problemas.
« Reply #46 on: January 12, 2011, 03:53:41 PM »

Buf, eso de separar las dudas va a estar complicado, porque conforme me van saliendo, voy preguntando, pero intentaré organizarme para el próximo post, y abriré varios, intentando organizar mis dudas por secciones. Este es el último post que pongo de manera "desorganizada".

Acabo de probar tu diálogo (o sea, copio la función al final del script, y lo llamo desde on talk), y resulta que me da un error de sintaxis en la linea 60, que coincide con la linea 20 en tu codigo. No sé por qué será. Pensaba que el error me lo daría al intentar encontrar el nombre del actor, pero ha fallado antes. XD

Y un último problema que me ha surgido: he probado a compilar el juego completo. resulta que, al ir a una de las scenes (BUS concretamente), el personaje no se coloca donde debe. sin embargo, cuando lo pruebo desde el wintermute, va perfecto. Con el resto de escenas no me da problemas: el personaje acaba donde debe. ¿a qué puede deberse esto? Pensaba que el resultado final y la "simulación" del wintermute serían idénticas...
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Empezando y con problemas.
« Reply #47 on: January 12, 2011, 04:02:42 PM »

Si la línea que te da error de sintaxis es

Code: [Select]
Responses[0] = "Vuelveme a contar lo del barco");

creo que es porque le sobra el cierre del paréntesis, la línea correcta debería ser

Code: [Select]
Responses[0] = "Vuelveme a contar lo del barco";

De la misma manera, la línea

Code: [Select]
Responses[1] = "Vuelveme a contar lo del coche");

debería darte también error de sintaxis, lo correcto sería

Code: [Select]
Responses[1] = "Vuelveme a contar lo del coche";

Un saludo.
Logged

HelLRaiseR

  • I don't want to make a Monkey Island clone :(
  • Moderator
  • Frequent poster
  • *****
  • Karma: 4
  • Offline Offline
  • Posts: 270
    • View Profile
    • Adventure Box Studios
Re: Empezando y con problemas.
« Reply #48 on: January 12, 2011, 04:39:38 PM »

Cosas del corta-pega  :D
Logged
Regards,

    Fernando

Juan Bonair

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 33
    • View Profile
Re: Empezando y con problemas.
« Reply #49 on: January 12, 2011, 06:29:59 PM »

¿eso no tendría mucho mas código, al tener que dividir la pantalla de manera diagonal?
Sí, cortar la pantalla en diagonal requeriría mucho más código o mucho más conocimiento de trigonometría del que tengo de momento.

¿podrían hacerse animaciones para que, al girarse a un lado o a otro, quedara mas natural?
Sí, WME maneja animaciones intermedias para que los actores giren más naturalmente. Molly, el actor por defecto de WME, tiene para cada dirección un sprite llamado turn.sprite, y en la definición del actor —molly.actor— tiene dos campos llamados "turnleft" y "turnright" (girar a la izquierda y girar a la derecha). El problema es que por defecto está vacío, y yo nunca investigué mucho de eso. En la documentación dice que sirve para dar más naturalidad a los actores, como por ejemplo el hecho de que las personas en realidad giramos los pies primero para cambiar de dirección.

¿no podría activar un script para todas estas situaciones aparte, y enlazarlo desde los objetos para, así, tener menos código?
Sí. Tendrías que definir el método en un script aparte, usando la palabra method en lugar de function. Luego, en algún script del actor —preferentemente el que viene en la misma carpeta que su definición y sus animaciones— añadir
Code: [Select]
this.AttachScript(/* Acá, el script en que definiste tu método */);y listo, ya podrás usar el TurnToObject() con la misma soltura que el Talk() o el GoToObject(), sin tener que definirlo cada vez. El script podrías añadirlo a cualquier objeto, pero me parece más conveniente al actor, sólo por una cuestión de organización.

el codigo para activar otra animación en el prota (y ya que estamos, en el otro personaje), ¿cómo se haría?
Es muy fácil. Tendrías que crear un sprite con tu animación y luego
Code: [Select]
actor.PlayAnim("actors\molly\golpear.sprite");donde quieras que ejecute la animación.

Y sí, que se fue un poco por las ramas el hilo.

Logged
Pages: 1 2 3 [4]
 

Page created in 0.18 seconds with 23 queries.