16
Foro técnico / Re: Interacciones, cambios de sprite, objetos e inventario.
« 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.
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:
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;
}