Please login or register.

Login with username, password and session length
Advanced search  

News:

This forum provides RSS feed. To query recent posts use this url. More...


Pages: [1] 2 3 4

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

0 Members and 1 Guest are viewing this topic.

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Empezando y con problemas.
« on: December 07, 2010, 06:20:15 PM »

Lo primero, un saludo a todos.
Desde hace ya muchísimos años soy aficionado a los juegos de aventuras. El dia que conocí a Manny Calavera descubrí cómo se debe contar una buena historia interactiva. Pero no voy a aburriros con mi vida.
Llevo mucho buscando un tutorial en español para este programa, y lo encontré hace poco. Aunque ya domino bien el editor de escenas y el editor de sprites, siguen surgiendo problemas que me gustaria que resolvieseis. Empecemos por los mas graves y problemáticos. ya os iré exponiendo más.

Cuando cambio de escena con el personaje, siempre se me coloca en mitad de la escena. Antes no podía ni moverlo, ya que se colocaba en una region no transitable. lo solucioné ampliando esa zona, pero solo es una solución provisional. ¿Cómo se consigue que el personaje se coloque en la entrada de la escena, y no en el centro? ¿y si tiene mas de una entrada la escena, tambien puedo colocarlo para que entre por ambas? Por ejemplo, dos caminos, uno superior y otro inferior. El camino superior debería conectar con el superior de la otra escena, y el inferior con el inferior.
¿Cómo logro esto?

Gracias de antemano. ;D
Logged

YO

  • Our first adventure:
  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 32
    • View Profile
Re: Empezando y con problemas.
« Reply #1 on: December 08, 2010, 12:57:24 AM »

wenas, esto es bastante sencillo, jeje segun vayas aprendiendo te parecera mas sencillo lo de que aparezca en un lugar determinado viene definido en el script del scene_init de cada escenario que haces, asi para que cuando cambies a otra escena te aparece en el lugar que quieres pones esto en el scene_init de la escena a la que va a ir el personaje:
Code: [Select]
if(Game.PrevScene=="Room")
{
  actor.SkipTo(X, Y);
  actor.Direction = DI_UP;
}
al principio la Room es la escena desde la que el personaje viene a esta escena, la posicion en la que aparece es X,Y que tu le tienes que poner el valor deseado y el direction es hacia donde mira, DI_UP hacia arriba, DI_LEFT hacia la izquierda etc, de todas formas esto viene muy bien explicado en el tutorial que trae el programa, echa un vistazo a los scripts
un saludo!!! si necesitas mas ayuda x aqui andamos ;)
Logged
Henry y El libro magico, proximamente sacaremos la demo en español...
Henry and the magic book, demo coming soon in English

Juan Bonair

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 33
    • View Profile
Re: Empezando y con problemas.
« Reply #2 on: December 08, 2010, 02:01:47 AM »

Por lo de las entradas múltiples, una solución más práctica vendría a ser algo así:

Code: [Select]
switch(Game.PrevScene)    // Acá establecés la variable a comparar, en este caso "Game.PrevScene".
    {
        case "UnaEscena":    // Si la escena anterior se llamaba "UnaEscena", ejecutar el código siguiente hasta "break;".
            actor.SkipTo(40, 267);    // Llevar al personaje a las coordenadas señaladas (en este caso "40,267").
            actor.Direction = DI_UP;    // Poner al personaje mirando hacia arriba (de espaldas al jugador).
            break;

        case "OtraEscena":   // Si, en cambio, se llamaba "OtraEscena", ejecutar el código siguiente hasta "break;"
            actor.SkipTo(303, 86);    // Llevar al personaje a estas otras coordenadas.
            actor.Direction = DI_DOWN;    // Ponerlo mirando hacia abajo (de cara al jugador).
            break;

        case "UnaEscenaMas": actor.SkipTo(27, 86);
            actor.Direction = DI_LEFT;
            break;

        default:    // Si la escena anterior no se llama "UnaEscena" ni "OtraEscena" ni "UnaEscenaMas", ejecutar el código siguiente hasta el final.
            actor.SkipTo(23, 112);
            actor.Direction = DI_RIGHT;
    }

Espero se entienda.
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Empezando y con problemas.
« Reply #3 on: December 08, 2010, 06:35:34 PM »

OK, codigo apuntado, probado y comprendido. Muchas gracias.
perdonad si hago preguntas demasiado evidentes para ustedes o que se encuentran en el tutorial, pero es que gran parte del tutorial (sobre todo la parte de scripts, que es la que de verdad me da problemas) está en inglés, y si no soy capaz de entender el lenguaje de programación (variables y demás) mucho menos en inglés.

Deacuerdo, ya puedo colocar al personaje donde y como quiera cuando entra en una escena o aparece en ella directamente. Ahora tengo otra pregunta. Supongamos 2 scenes, A y B. Y ahora supongamos dos accesos (X e Y) de A hasta B diferentes, y viceversa (un camino superior (X) y uno inferior (Y) en el mapa, por ejemplo). ¿Podría, desde la entrada X de la scene A llegar a la entrada X de la scene B y viceversa? ¿Podría hacer lo mismo con el camino Y, en ambas direcciónes (de A a B y de B a A)?

Otra preguntilla: tengo un sprite de una fuente parada, y otro con la fuente animada echando agua. Intenté ponerle sonido a este último (un sonido bastante mas largo que la animación del sprite), pero el sonido empieza, se corta, y vuelve a empezar, cuando yo lo que busco es que el sonido sea continuo y vuelva a comenzar cuando se acabe la pista (un loop, igual que con la animación, pero de mayor duración). ¿cómo soluciono esto?

Tampoco sé cómo, al darle la opción con mi personaje de "acción" al boton de la fuente (o a la fuente directamente), se encienda la fuente (cambiarla por el sprite animado con sonido ya rectificado) y se apague si vuelvo a darle al botón o a la fuente(tanto la animación como el sonido).

Muchas gracias, y espero que tengan paciencia conmigo. ::slug
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Empezando y con problemas.
« Reply #4 on: December 08, 2010, 07:22:26 PM »

otra preguntilla que se me habia olvidado:
Cuando cambia el personaje a una escena bastante mas grande que la pantalla (el doble o así) la pantalla comienza en el extremo izquierdo, y el personaje en el derecho. La pantalla empieza en la izquierda, y se desliza hasta la derecha, hasta que se encuentra con el personaje y luego sigue normal. No es que sea especialmente molesto, ya que el personaje sigue respondiendo y demás, pero me gustaría saber cómo colocar desde el comienzo la pantalla en el lugar adecuado.
Gracias de nuevo. ::rock
Logged

Juan Bonair

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 33
    • View Profile
Re: Empezando y con problemas.
« Reply #5 on: December 08, 2010, 08:50:54 PM »

Bien, vamos por partes que si no me mareo.

¿Podría, desde la entrada X de la scene A llegar a la entrada X de la scene B y viceversa? ¿Podría hacer lo mismo con el camino Y, en ambas direcciónes (de A a B y de B a A)?

Es perfectamente posible, yo lo solucionaría con una variable global común y silvestre. Supongamos que tu entrada/salida X (de la escena A) es un objeto... cliqueable, si es que la palabra existe. Tons en su script deberías escribir algo así:

Code: [Select]

on "LeftClick"    // Al cliquear la salida...
    {
        global Entrada = "X";    // Declarar la variable global "Entrada" y darle el valor "X".
        Game.ChangeScene("scenes\B\B.scene");    // Cambiar a la escena B.
    }


Y en la entrada/salida Y (de la escena A) deberías escribir lo mismo, pero cambiando global Entrada = "X"; por global Entrada = "Y";. Luego, en el script de inicialización de la escena B...

Code: [Select]

global Entrada;    // Declarar la variable "Entrada". Esto es sólo para poder usarla en el resto de este script.

switch(Entrada)    // Acá establecés "Entrada" como la variable a comparar.
    {
        case "X":    // Si "Entrada" tiene el valor "X"...
            actor.SkipTo(40, 267);    // Llevar al personaje a la entrada X de la escena B.
            actor.Direction = DI_UP;
            Game.Msg("¡Está en la entrada equis!");    // Líneas adicionales que lo hacen a uno sentirse mejor cuando el código funciona bien.
            actor.Talk("¡Estoy en la entrada equis!");
            break;    // ¡Esta línea es muy importante! Si no el código no va a saber dónde termina el "case X".

        case "Y":   // Si, en cambio, tiene el valor "Y"...
            actor.SkipTo(303, 86);
            actor.Direction = DI_DOWN;
            break;    // Este "break" es opcional, ya que acá termina el comando "switch", no hay necesidad real de decirle a WME que se detenga.
    }


Y calculo que más o menos se entiende cómo es que se hace. Al comenzar la escena B, coloca al personaje dependiendo de si la variable Entrada vale X o Y. Si el jugador ha cliqueado X, la variable valdrá X y entonces el personaje aparecerá en las coordenadas señaladas en el case "X":. La variable Entrada tranquilamente podría llevar los valores true y false, pero me parece que poner el nombre de la entrada a la que nos estamos refiriendo hace el código más entendible.
Las entradas X e Y de la escena B pueden llevar exactamente el mismo código que las de la escena A. En este caso, el scene_init de la escena A debería llevar un código casi igual al de B, sólo que con otras coordenadas y direcciones. Ah, y si A es la primera escena del juego, además de case "X": y case "Y": deberías agregar un default: para cuando el juego recién comienza y la variable Entrada todavía no tiene asignado ningún valor.

La pantalla empieza en la izquierda, y se desliza hasta la derecha, hasta que se encuentra con el personaje y luego sigue normal. No es que sea especialmente molesto, ya que el personaje sigue respondiendo y demás, pero me gustaría saber cómo colocar desde el comienzo la pantalla en el lugar adecuado.

Esta es fácil. En la inicialización de tu escena grande tendrías que agregar la siguiente línea:

Code: [Select]

Scene.SkipTo(actor);


No sé mucho de sonidos en WME así que no sabría qué decirte con respecto a lo de la fuente. Deberías poner acá en el foro el código que estás usando, así sería más fácil ubicar algún error, si lo hay.

El código que te mando lo escribí de memoria y no lo probé, de modo que si bien debería funcionar puede tener errores de tipeo o algo que se me haya olvidado (espero que no, cualquier cosa avisá si algo no funcionó como debía). Ojalá hayas entendido algo de lo que escribí. ¡Suerte!
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Empezando y con problemas.
« Reply #6 on: December 10, 2010, 03:41:45 PM »

 ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug ::slug
Lo siento, pero no termina de funcionarme como debiera. Probablemente el problema está en que no sé dónde hay que colocar exactamente el código, por lo que se me forma un batiburrillo sin sentido. El primer código juraría que sí lo he puesto sin problemas (Se supone que X e Y he de sustituirlos por los nombres que tengan los caminos, cierto?), pero el segundo y el tercero (el de las entradas y el de la escena que sigue desplazándose) no sé dónde van exactamente. el segundo código me da unos resultados rarísimos. El tercer código lo puse justo al principio del scene_init de la escena grande ("BUS" en este caso), pero la escena seguía iniciándose en la parte izquierda y se desplazaba a la derecha, en lugar de aparecer donde está el personaje (parte derecha).
Code: [Select]
#include "scripts\base.inc"

// here comes the stuff which initializes the scene (Opcion B)(en caso de que el lugar tenga accesos desde mas de una scene:)

switch(Game.PrevScene)    // Acá establecés la variable a comparar, en este caso "Game.PrevScene".
    {
        case "new_scene":    // Si la escena anterior se llamaba "UnaEscena", ejecutar el código siguiente hasta "break;".
            actor.SkipTo(586, 361);    // Llevar al personaje a las coordenadas señaladas (en este caso "40,267").
            actor.Direction = DI_DOWNLEFT;    // Poner al personaje mirando hacia arriba (de espaldas al jugador).
            break;

        case "BUS":   // Si, en cambio, se llamaba "OtraEscena", ejecutar el código siguiente hasta "break;"
            actor.SkipTo(52, 584);    // Llevar al personaje a estas otras coordenadas.
            actor.Direction = DI_UPRIGHT;    // Ponerlo mirando hacia abajo (de cara al jugador).
            break;

        default:    // Si la escena anterior no se llama "UnaEscena" ni "OtraEscena" ni "UnaEscenaMas", ejecutar el código siguiente hasta el final.
            actor.SkipTo(400, 400);
            actor.Direction = DI_RIGHT;
    }

////////////////////////////////////////////////////////////////////////////////
// scene state
global StateRoom;


// default values
if(StateRoom==null)
{
  StateRoom.Visited = false;
  // add scene states here
}



////////////////////////////////////////////////////////////////////////////////
// setup scene according to state variables



////////////////////////////////////////////////////////////////////////////////
if(!StateRoom.Visited)
{
  StateRoom.Visited = true;

  // this is our first visit in this scene...
}
Este es el código que tengo en scene_init de la room que tiene (o debería tener) 2 entradas con la escena "BUS" y una con la escena "new scene". ¿dónde he de colocar ese código que me diste Juan? Yo lo coloqué en el caso "BUS", pero está visto que no lo hice adecuadamente.

Siento las molestias. :-[
Logged

Juan Bonair

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 33
    • View Profile
Re: Empezando y con problemas.
« Reply #7 on: December 11, 2010, 03:56:32 AM »

Hombre, que no es molestia.
Sólo para saber cómo contestarte: ¿este script que acabás de postear te funciona? Es decir, ¿el personaje empieza en posiciones diferentes dependiendo de la escena en la que estuvo antes?
Porque primero que estemos hasta ahí y luego sí empezamos a pensar en lo de las dos entradas alternativas.
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Empezando y con problemas.
« Reply #8 on: December 11, 2010, 06:32:54 PM »

Si. Este código va estupendamente. si vengo de BUS, aparece en el lado izquierdo en el camino 1 (venga del camino 1 o del 2). y si vengo de la "new scene" (que es una cabaña) aparece en la puerta de la cabaña. Todo correcto.
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Empezando y con problemas.
« Reply #9 on: December 11, 2010, 07:18:04 PM »

Acabo de solucionar el problema de la escena grande que empezaba retirada del prota. habia que poner el código que me diste detrás de los datos del actor (en el scene_init, como dijiste)  ;)
Logged

Juan Bonair

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 33
    • View Profile
Re: Empezando y con problemas.
« Reply #10 on: December 11, 2010, 11:25:23 PM »

¡Excelente! Y sí, lo de dónde poner el Scene.SkipTo(actor); fue un error mío, te dije en qué script pero me olvidé de aclarar en qué parte. Aunque ya te haya salido, te hago una breve explicación: la cosa es primero posicionar al actor (con actor.SkipTo()) y recién después mover la escena al actor. De otra forma, la escena va a ir al actor, pero el actor —aún no posicionado— estará en la posición en que lo dejaste en la escena anterior.

Ahora vamos con lo de las entradas. Voy a ver cuán simple puedo contarlo.

1) En SceneEdit, seleccioná la entrada "X" (o el nombre que tenga) y luego cliqueá en "Scripts...". Creá un nuevo script y escribí lo siguiente:
Code: [Select]
#include "scripts\base.inc"

////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
global Entrada = "X";    // O el nombre que tenga, claro.
Game.ChangeScene("scenes\caca\caca.scene");    // Y acá la dirección real de tu segunda escena.
}
(Tené en cuenta que este es un ejemplo simple, tu entrada puede tener más código, como por ejemplo un buen actor.GoTo() para que tu personaje camine hacia la entrada antes de cambiar la escena. Lo importante es que el cambio de escena sea la úlitma línea antes de la llave de cierre.)

2) Idéntico procedimiento con la otra entrada, pero cambiando el valor de Entrada por su otro nombre.
Code: [Select]
#include "scripts\base.inc"

////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
global Entrada = "Y";
Game.ChangeScene("scenes\caca\caca.scene");
}

3) Editá el scene_init de tu segunda escena (en mi ejemplo, "caca.scene") para que empiece así:
Code: [Select]
#include "scripts\base.inc"

// here comes the stuff which initializes the scene
global Entrada;
switch(Entrada)
{
 case "X": actor.SkipTo(143, 422); break;
 case "Y": actor.SkipTo(637, 417);
}
(Cambiando "X" e "Y" por los respectivos valores que le hayas asignado a Entrada en los scripts anteriores. Después de este código vendría el actor.Active = true y el Scene.SkipTo(actor). Para mantenerlo simple, resumí cada caso (el X y el Y) en una sola línea que solamente manda al actor a su posición. En un ejemplo real tendrías que agregar la dirección a la que mira y cualquier otra cosa que quieras que pase según cuál entrada cliqueaste. Y siempre conviene poner saltos de línea en el código para que se vea más organizado.)

4) Arrancá el juego en modo de prueba (F5). Guardá la partida no bien empezaste. Cliqueá la primera entrada y fijate si funciona. Cargá la partida que guardaste y probá la otra entrada.

Y ya está. Este código lo probé yo mismo y a mí me funciona. Con esto ya tendrías una escena con dos salidas y otra con dos entradas. Probalo y decime si funcionó. Recién ahí preocupate por hacer el camino inverso (las dos entradas de la otra escena), aunque es prácticamente lo mismo que esto, e incluso podrías utilizar la misma variable global "Entrada". Cualquier cosa que no entiendas o no te salga, avisá.
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Empezando y con problemas.
« Reply #11 on: December 12, 2010, 06:41:23 PM »

Vale, está casi todo controlado. pero sigue habiendo 2 problemitas, que es el mismo: todas las entradas llevan a donde yo quiero, y el personaje se coloca en su sitio. Sin embargo, cuando clico para ir al camino 1 (tando desde una escena como de la otra) el personaje NO va hacia allá, aunque en el código está bien clarito:
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
  global Entrada = "Camino1";
Game.ChangeScene("scenes\BUS\BUS.scene");
}
Sin embargo, el camino 2 no da ningún problema en ninguno de los dos sentidos (de una escena a otra y viceversa), y el código es idéntico excepto por el nombre del objeto:
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
  global Entrada = "Camino2";
Game.ChangeScene("scenes\BUS\BUS.scene");
}

¿qué ocurre? ::slug
Logged

Juan Bonair

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 33
    • View Profile
Re: Empezando y con problemas.
« Reply #12 on: December 13, 2010, 05:49:27 AM »

Creo que sé lo que puede estar pasando y es un error bastante simple:

Cuando usás el método GoToObject(), WME primero se fija si el objeto en cuestión —en este caso el camino, representado en el script por la palabra this— tiene asignadas unas coordenadas a las que caminar, y si no las tiene directamente manda al actor a la posición del objeto en la escena.

Lo que supongo es que no le asignaste coordenadas a las que caminar en SceneEdit, y que tu actor sólo puede caminar a tus Camino2s porque tus Camino1s están fuera del área caminable (generalmente floor).

Estas coordenadas, y la dirección a la que debe apuntar el actor, se establecen sin script en SceneEdit, donde dice Walk to:. Espero que sea este el problema, porque no se me ocurre otra cosa. Si no era esto avisá, y si todo lo demás falla siempre podrás usar un GoTo() y marcar las coordenadas específicas, aunque entiendo que no es lo mejor.
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Empezando y con problemas.
« Reply #13 on: December 13, 2010, 01:37:48 PM »

 :D Yeah! caminos correctos! Efectivamente, no le asigné las coordenadas.::thumbup
No sé qué haría si tí. ;D, pero sigamos:

hay cosas que probablemente sean sencillas, pero que yo no sé cómo hacerlas. Como por ejemplo:
-Combinar objetos del inventario y obtener un tercero.
-Usar un objeto del inventario con entidades (objetos, personajes o lo que sea) y que dé como resultado otro objeto, un dialogo, un cambio de escenario,...
-Activar la ya mencionada fuente ("usar" un objeto y que su sprite cambie por otro o se active otro sprite, que active un archivo de sonido, que una vez activado el segundo sprite se pueda interactuar con éste segundo sprite y otro objeto de mi inventario,...o que el jugador cambie de localización,...)

Le estoy dando vueltas al tutorial y no veo cómo resolverlo. O estoy ciego, o está en inglés... ::slug
Logged

Juan Bonair

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 33
    • View Profile
Re: Empezando y con problemas.
« Reply #14 on: December 15, 2010, 01:22:57 AM »

Por lo de la fuente, un demo de WME que yo tengo —y no encuentro el enlace de descarga en ningún lado— tiene un ventilador que funciona de la siguiente manera:

Code: [Select]
on "Take"
{
  actor.GoToObject(this);
  Game.Interactive = false;

  // get the fan entity
  var EntFan = Scene.GetNode("fan");

  // set the fan etity sprite depending on the state variable
  // (0-off, 1-normal, 2-false)

  if(StateRoom.FanSpeed==0)
  {
    actor.Talk("It's turned off. I'll turn it on...");
    actor.PlayAnim("actors\molly\ur\take1.sprite");
    EntFan.PlaySound("sounds\fan_start.ogg");
    actor.PlayAnim("actors\molly\ur\take2.sprite");
    Sleep(1400);
    EntFan.SetSprite("scenes\room\sprites\fan.sprite");
    StateRoom.FanSpeed = 1; // save the new fan state
  }

  else if(StateRoom.FanSpeed==1)
  {
    actor.Talk("It's running at normal speed. Let's make it spin faster...");
    actor.PlayAnim("actors\molly\ur\take1.sprite");
    EntFan.SetSprite("scenes\room\sprites\fan_fast.sprite");
    actor.PlayAnim("actors\molly\ur\take2.sprite");
    StateRoom.FanSpeed = 2;
  }

  else if(StateRoom.FanSpeed==2)
  {
    actor.Talk("OK, I'll turn it off.");
    actor.PlayAnim("actors\molly\ur\take1.sprite");
    EntFan.PlaySound("sounds\fan_stop.ogg");
    EntFan.SetSprite("scenes\room\sprites\fan_off.sprite");
    actor.PlayAnim("actors\molly\ur\take2.sprite");
    StateRoom.FanSpeed = 0;
  }

  Game.Interactive = true;
}

Sin embargo, me parece que puedo simplificarlo a lo siguiente:

Code: [Select]
on "Take"    // Al usar la acción en el objeto...
{
  actor.GoToObject(this);    // Que el actor vaya a él (opcional).
  Game.Interactive = false;    // Que el juego deje de ser interactivo (opcional).

  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {

  case "scenes\MiEscena\sprites\fuente_normal.sprite":    // Si la fuente tiene su "sprite" por defecto.
    actor.Talk("Voy a cambiar el ''sprite'' de esta fuente");
    this.PlaySound("sounds\AguaCorriendo.ogg",true);    // Que la fuente reproduzca el sonido y que lo repita.
    this.SetSprite("scenes\MiEscena\sprites\fuente_haciendo_algo.sprite");    // Asignarle otro "sprite".
    break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\MiEscena\sprites\fuente_haciendo_algo.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("Mejor la vuelvo a como estaba antes.");
    this.StopSound();    // Detener el sonido que estaba reproduciendo.
    this.SetSprite("scenes\MiEscena\sprites\fuente_normal.sprite");    // Devolverle su "sprite" anterior.

  }

  Game.Interactive = true;

Algunas claves para comprenderlo mejor:

1) Este no es el código entero que debería llevar tu fuente, es solamente el que corresponde a la acción "Take".

2) En realidad el comando switch() podría llevar una variable que adquiriera los valores true o false dependiendo de si la fuente está andando o no. En ese caso tendrías declararla (var FuenteAndando;) y escribir al final de cada case algo así como FuenteAndando = true; (o false, según sea el caso). Me pareció complicártela demasiado, ya que es más fácil directamente cotejar qué sprite tiene, como en mi ejemplo, que andar creando variables todo el tiempo. Por supuesto que ya es otro tema si querés que el juego recuerde en qué estado está la fuente anque hayas salido y entrado nuevamente a la escena, pero ya veremos eso cuando te haya funcionado y hayas entendido este script.

3) No sé cómo estabas implementando tu sonido. Creo más práctico usar un PlaySound("sonido.ogg",true) que insertar el sonido en el sprite mismo. Fijate que el método  PlaySound() tiene tres parámetros: el primero es qué sonido se reproduce y el segundo es si debe o no debe reproducirse en bucle, que por defecto queda en false si no lo especificás de otra manera (el tercero es a partir de qué punto comienza a repetirse el bucle y se mide en milisegundos, en este caso no lo usamos, es decir, lo dejamos en 0 por defecto y por lo tanto el sonido se repite desde el principio).

Y vamos, lo mismo de siempre, que avises de tus problemas y dudas si los hay. Primero esto de la fuente y después las demás dudas.
Logged
Pages: [1] 2 3 4
 

Page created in 0.036 seconds with 19 queries.