Please login or register.

Login with username, password and session length
Advanced search  

News:

IRC channel - server: waelisch.de  channel: #wme (read more)

Pages: [1] 2  All

Author Topic: Interacciones, cambios de sprite, objetos e inventario.  (Read 13239 times)

0 Members and 1 Guest are viewing this topic.

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Interacciones, cambios de sprite, objetos e inventario.
« on: January 14, 2011, 07:49:41 PM »

No sabía cómo generalizar este post para poder usarlo mas adelante. creo que el título es bastante apropiado. os voy a exponer, de nuevo, el problema de la basura. A ver si a alguien se le ocurre algo... una solución, u otro metodo para resolverlo sin errores. He aquí el script de la basura:
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
  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\Room\basuraclosed.sprite":    // Si la fuente tiene su "sprite" por defecto.
     actor.Talk("puaj, basura.");
    break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\Room\basuraopen.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("Antes he tocado algo muy blando... y húmedo...");
break;
  }

  Game.Interactive = true;
 
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
  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\Room\basuraclosed.sprite":    // Si la fuente tiene su "sprite" por defecto.
    actor.Talk("A ver qué encuentro...");
 actor.Talk("Un segundo.");
   this.SetSprite("scenes\Room\basuraopen.sprite");    // Asignarle otro "sprite".
  Game.TakeItem("albal");
  actor.Talk("esto podrá serme util. A ver algo más...");
  actor.Talk("...");
  Game.TakeItem("martillo");
    actor.Talk("¡Un martillo y un trozo de papel albal!");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\Room\basuraopen.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("Bastante he buscado ya. ¿No crees?");
break;
  }

  Game.Interactive = true;
  }
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  actor.Talk("¿saldrá el bicho de barrio sésamo?");
}
////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.Talk("¡¡Ya voy!!");
  actor.GoToObject(this);
}
Siempre comienzo las pruebas en la escena en la que está la basura. Pues bien:

1º- Si abandono la scene y vuelvo, la basura ha desaparecido >:(, con todos sus sprites, objetos y letreros en el ratón.

2º- Si no abandono la escena, la basura funciona estupendamente: La observa de diferentes formas dependiendo de su sprite, la usa y coge los objetos sin problemas, añadiendolos al inventario y no permitiéndome volver a cogerlos de la basura, cambia el sprite como debe,... en fin, todo estupendo ;D. Pero en cuanto salgo de la scene y vuelvo, ocurre lo mismo que en el caso 1: desaparece, y ya no puedo ni observarla, ni marcarla con el ratón ni nada. >:(

¿Qué ocurre?
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #1 on: January 15, 2011, 12:35:28 PM »

Por si acaso publica también el script desde el que cargues la scene de la basura cuando vuelvas depués de haber salido de ella, a ver si encontramos algo raro.
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #2 on: January 15, 2011, 03:36:27 PM »

Supongo que te refieres al script scene.init de esta scene. Si no, no sé a qué te refieres. Igual es que me falta un script... :( En cualquier caso, en este scene.init solo modifiqué el tema de las entradas a la scene.
Code: [Select]
#include "scripts\base.inc"

// here comes the stuff which initializes the scene
global Entrada;
switch(Entrada)
{
  case "camino1":  // Si la escena anterior se llamaba "UnaEscena", ejecutar el código siguiente hasta "break;".
            actor.SkipTo(52, 584);    // Llevar al personaje a las coordenadas señaladas (en este caso "40,267").
            actor.Direction = DI_UPRIGHT;    // Poner al personaje mirando hacia arriba (de espaldas al jugador).
            break;
  case "camino2":  // Si la escena anterior se llamaba "UnaEscena", ejecutar el código siguiente hasta "break;".
            actor.SkipTo(19, 108);    // Llevar al personaje a las coordenadas señaladas (en este caso "40,267").
            actor.Direction = DI_DOWNRIGHT;    // Poner al personaje mirando hacia arriba (de espaldas al jugador).
            break;
 case "Salida":  // 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;
 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...
}

Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #3 on: January 16, 2011, 12:16:08 AM »

No, no me refería a este script si no al de la escena desde la que vuelves a esta. Tendrás otra escena en la que tendrás una región que cuando hagas clic con el ratón cargue esta escena (la de la basura), me refiero a ese script al que carga esta escena de nuevo.
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #4 on: January 16, 2011, 09:03:11 PM »

Ok. Lo que pasa es que hay 3 regiones desde las que vuelve a la escena de la basura: 2 caminos desde la scene BUS y otra desde la scene new_scene. Te dejo los 3, aunque son casi idénticos:
Camino1
Code: [Select]
#include "scripts\base.inc"

////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
actor.GoToObject(this);
global Entrada = "camino1";
Game.ChangeScene("scenes\Room\Room.scene");
}
on "LeftDoubleClick"    // Al darle doble clic izquierdo...
{
global Entrada = "camino1";
 Game.ChangeScene("scenes\Room\Room.scene");    // ...cambiar la escena.
}
Camino2
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
  global Entrada = "camino2";    // Declarar la variable global "Entrada" y darle el valor "X".
        Game.ChangeScene("scenes\Room\Room.scene");    // Cambiar a la escena B.
}
on "LeftDoubleClick"    // Al darle doble clic izquierdo...
{
 global Entrada = "camino2";
 Game.ChangeScene("scenes\Room\Room.scene");    // ...cambiar la escena.
}
Salida
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
  global Entrada = "Salida";
Game.ChangeScene("scenes\Room\Room.scene");
}
on "LeftDoubleClick"    // Al darle doble clic izquierdo...
{
global Entrada = "Salida";
 Game.ChangeScene("scenes\Room\Room.scene");    // ...cambiar la escena.
}
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #5 on: January 17, 2011, 09:25:59 AM »

La verdad es que yo no veo nada raro. No me extrañaría que lo que te pasa esté relacionado con el tema de las rutas absolutas que hemos visto en el post de la compilación. Corrige las rutas absolutas para ponerlas relativas y tal vez resuelvas dos problemas de una tacada.
Otra cosa que he visto es que defines la variable global Entrada cada vez que la usas en un método, eso no es conceptualmente correcto. Dado el ámbito global de la variable lo lógico es que la definas una sola vez al inicio del script y luego la asignes donde necesites. Quedaría más o menos así:

Code: [Select]
#include "scripts\base.inc"

global Entrada;

////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
actor.GoToObject(this);
Entrada = "camino1";
Game.ChangeScene("scenes\Room\Room.scene");
}
on "LeftDoubleClick"    // Al darle doble clic izquierdo...
{
Entrada = "camino1";
Game.ChangeScene("scenes\Room\Room.scene");    // ...cambiar la escena.
}
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #6 on: January 17, 2011, 05:28:07 PM »

Ruta relativa corregida, y variables globales entrada corregidas. Y la maldita basura sigue desapareciendo cuando salgo y vuelvo de la scene...  >:(

He intentado hacer otro caso de objetos que se combinan, cambian los sprites de determinados objetos de la scene y obtengo otros objetos diferentes. Y seguro que me estoy equivocando en una chorrada, pero no funciona.
lo que me gustaría que me dijeseis es: ¿cual es el mejor método para solucionar estas "interacciones"? Yo he usado el método por el cual conseguí encender la fuente, que cambiase de sprite, usar un objeto con ella y demás. Luego lo probé en la basura, y ya conoceis los resultados. Pues bien, ahora he probado con una chimenea, y me da errores en las partes que lo tengo dividido para que diga y haga cosas diferentes dependiendo de su sprite (al igual que hacía con la fuente), en este caso, en las funciones "on jarrolleno" y "on lookAt". El resto de órdenes sí que funcionan bien.
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
 Game.Interactive = false;
 
  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {
  case "scenes\new_scene\fuegoon.sprite":    // Si la fuente tiene su "sprite" por defecto.
  actor.TurnTo(this);
   actor.Talk("El fuego ese está muy fuerte.");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\new_scene\fuegooff.sprite":    // Si la fuente ya tiene su otro "sprite".
  actor.TurnTo(this);
actor.Talk("Solo han quedado algunas ascuas en el fondo.");
break;
  }
   Game.Interactive = true;
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
  actor.TurnTo(this);
  actor.Talk("Si, claro que si. ahora mismo lo cojo.");
  actor.Talk("¿Con la mano o con la boca, Torrente?");
}
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  actor.TurnTo(this);
  actor.Talk("Fueguecito fueguecito, mira que estás calentito.");
}


////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
}
on "jarrolleno"
{
 Game.Interactive = false;
 actor.GoToObject(this);

  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {
  case "scenes\new_scene\fuegoon.sprite":    // Si la fuente tiene su "sprite" por defecto.
    actor.Talk("Ahí va.");
actor.PlayAnim("actors\molly\ur\take1.sprite");
    this.SetSprite("scenes\new_scene\fuegooff.sprite");    // Asignarle otro "sprite".
Game.DropItem("jarrolleno");
Game.TakeItem("jarro");
actor.PlayAnim("actors\molly\ur\take2.sprite");
actor.Talk("Ala, el fuego apagado.");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\new_scene\fuegooff.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("Ya está suficientemente bien apagado.");
break;
  }
   Game.Interactive = true;
}

Igual es que hay otro método mas práctico para hacer esto mismo. de todas formas, os dejo tambien el script de la fuente, en el que me basé, que este sí que funciona a las mil maravillas:
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
  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\BUS\fuente.sprite":    // Si la fuente tiene su "sprite" por defecto.
     actor.Talk("Es una fuente apagada. Tiene un botón.");
    break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\BUS\fuenteon.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("¡Mirala que bonica ella, hechando aguica y tó!");
break;
  }
 
  Game.Interactive = true;
}


////////////////////////////////////////////////////////////////////////////////
on "Take"
{
  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\BUS\fuente.sprite":    // Si la fuente tiene su "sprite" por defecto.
    actor.Talk("Encendiendo motores...");
    this.PlaySound("scenes\BUS\stream-3.wav",true);    // Que la fuente reproduzca el sonido y que lo repita.
    this.SetSprite("scenes\BUS\fuenteon.sprite");    // Asignarle otro "sprite".
    actor.Talk("¡Funciona de maravilla!");
break;    // ¡Línea importante! Nunca la olvides.

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

  Game.Interactive = true;
  }
 
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  actor.Talk("Fuentecita fuentecita, ¿quien es de todas la mas fresquita?");
}


////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.Talk("¡¡Ya voy!!");
  actor.GoToObject(this);
}
on "jarro"
{
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\BUS\fuente.sprite":    // Si la fuente tiene su "sprite" por defecto.
    actor.Talk("No tiene agua.");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\BUS\fuenteon.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("Leno, por favor.");
   Game.DropItem("jarro");
Game.TakeItem("jarrolleno");
actor.Talk("¡Agüita fresquita pa la nena!");
break;
  }

  Game.Interactive = true;
}
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #7 on: January 17, 2011, 05:34:30 PM »

La verdad es que no veo nada raro ¿qué errores te dan exactamente esos métodos?
Aunque ya imagino que sí pero ¿te has asegurado de que la ruta de los sprites que haya en el archivo .scene también sea relativa?
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #8 on: January 18, 2011, 12:07:50 AM »

Ruta de sprites confirmada.

El segundo script (la fuente) no me da ningún problema. Hace exactamente lo que quiero. ::rock

El primer script (el fuego) no da ningún error en la consola, pero no hace lo que yo le pido. Los comandos (o funciones o como se llamen) que solo tienen una opción (que funcionan igual, sea cual sea su sprite) no dan ningún problema (es el caso de on Talk, on Take y "on leftClick"). Sin embargo, cuando uso los comandos "on jarrolleno" y "on lookAt" (que son los que difieren las opciones dependiendo del sprite del fuego) no realiza ninguna acción. Los ignora, como si no existieran.

Y el error de la basura, como ya he explicado, no es tal, ya que no sale nada en la consola. Sin embargo, al salir de la scene y volver, ha desaparecido.

si los scripts están bien, tanto la basura como el fuego deberían funcionar sin problemas... y no es así. :-\
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #9 on: January 18, 2011, 09:08:17 AM »

Por lo que comentas de la chimenea da la impresión de que el sprite que tienes asignado no es ninguno de los dos por los que preguntas. Este extremo puedes confirmarlo añadiendo un default: al switch. Para saber que sprite tiene asignado lo más fácil es que uses un Game.Msg que te lo diga. Te pongo como quedaría el método con estas dos cosas que te acabo de decir:

Code: [Select]
on "LookAt"
{
 Game.Msg(this.GetSprite());  //Nos muestra en la parte superior izquierda del juego el nombre del sprite asignado a esta entidad
 Game.Interactive = false;
 
  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {
  case "scenes\new_scene\fuegoon.sprite":    // Si la fuente tiene su "sprite" por defecto.
  actor.TurnTo(this);
   actor.Talk("El fuego ese está muy fuerte.");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\new_scene\fuegooff.sprite":    // Si la fuente ya tiene su otro "sprite".
  actor.TurnTo(this);
actor.Talk("Solo han quedado algunas ascuas en el fondo.");
break;
   default:   //Si el sprite asignado no es ni fuegoon ni fuegooff
   actor.Talk("Parece que el sprite asignado no es ninguno de los anteriores.");
   }
   Game.Interactive = true;
}

Respecto a lo de la basura lo único que se me ocurre ya es que me pases el código fuente del proyecto y le echo un vistazo tranquilamente cuando tenga tiempo.

Un saludo.
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #10 on: January 18, 2011, 07:14:32 PM »

¿el codigo fuente? no sé lo que es. ???

Vale, error encontrado. tenía ligado al script un png en lugar del sprite ;D
Pero ahora me surge otro problema con el sprite, y es que no aparecen las imagenes enlazadas a el. O sea, not image found. Sin embargo, al editar el sprite, sí que tiene su imagen png asignada.
¿Sabes por qué podría ser?
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #11 on: January 18, 2011, 07:18:33 PM »

y otra cosa: ha aparecido un archivo de texto en la carpeta de la scene de la chimenea, que se llama SpriteEdit. no ha aparecido en ninguna de las otras escenas.
¿Qué es?
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #12 on: January 18, 2011, 07:24:11 PM »

Podría ser tema de que antes tuviese rutas absolutas y al cambiarlas a relativas ya no las encuentre porque en el fichero sprite sean absolutas o algo así, mírate el fichero .sprite a ver si es algo de eso. En cualquier caso a las malas siempre puedes volver a generar el sprite y listo.

Con el código fuente me refiero a que me pases la carpeta donde tengas el proyecto (con todos los archivos y subcarpetas naturalmente) y le echo un vistazo cuando pueda a ver si te localizo el error.

El fichero SpriteEdit creo que es el log del editor de sprites, échale un vistazo porque tal vez te de alguna pista acerca del Invalid Image.

Un saludo.
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #13 on: January 18, 2011, 08:09:30 PM »

 ;DVale, sprites de la chimenea corregidos. Era lo de las rutas absolutas. Tengo que aprender a organizarme para trabajar.

y ¿cómo te mando el archivo del proyecto, despues de comprimir la carpeta? creo que por aquí no se pueden mandar archivos. mandame un MP con tu cuenta de correo y te lo mando ahí. O si prefieres otro método, explicamelo por MP y lo hacemos como veas.

un saludo.
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #14 on: January 18, 2011, 08:24:05 PM »

Acabo de enviarte un MP con mi cuenta de correo electrónico.
Logged
Pages: [1] 2  All
 

Page created in 0.132 seconds with 23 queries.