Translations of this page:

Diálogos basados en iconos

Hola.

Debido al gran interés que existe por hacer diálogos basados en iconos en WME, he decidido crear un sencillo objeto universal que puedas usar y adaptar a tus necesaidades.

Aquí tienes un ejemplo de cómo implementarlo rápidamente:

1. Crea el archivo scripts\dialogueObject.script con el siguiente contenido:

#include "scripts\base.inc" 
 
 
// Define las dimensiones de los iconos de tu diálogo 
 
var ICON_WIDTH = 57;    
var ICON_HEIGHT = 57; 
 
 
 
// script es el nombre donde manejarás las respuestas del ociono seleccionado por el jugador 
 
method initializeDialogue(script) 
{ 
    this.script = script; 
    this.iconCount = 0; 
    this.window = Game.LoadWindow("windows\dialogueWindow.window"); 
 
    var tmpwin = this.window; 
    tmpwin.Visible = true; 
    tmpwin.AttachScript(script); 
 
} 
 
 
// Esto terminará el diálogo y liberará los recursos 
 
method endDialogue() 
{ 
    var tmpwindow = this.window; 
    tmpwindow.DetachScript(this.script); 
    tmpwindow.Close();     
} 
 
 
// Esto añadirá un icono a la ventana de diálogo 
 
method insertIcon(name, sprite, hoversprite) 
{ 
    var tmpwin = this.window; 
 
    var tmpButton = tmpwin.CreateButton(name); 
 
    tmpButton.X = this.iconCount * ICON_WIDTH;     
 
    tmpButton.SetImage(sprite); 
    tmpButton.SetHoverImage(hoversprite); 
 
    tmpButton.Visible = true; 
    tmpButton.Interactive = true; 
    tmpButton.ParentNotify = true; 
    tmpButton.Disabled = false; 
    tmpButton.PixelPerfect = false; 
    tmpButton.Width = ICON_WIDTH; 
    tmpButton.Height = ICON_HEIGHT; 
    this[this.iconCount] = name; // Guardamos el nombre para borrar rápidamente la referencia más adelante 
    this.iconCount = this.iconCount + 1; 
} 
 
// Esto elimina el icono (normalmente, después de agotar todos los temas) 
 
method removeIcon(name) 
{ 
    var tmpwin = this.window; 
    var reorder = -1; // a salvo de llamadas sin sentido 
    for  (var a = 0; a<this.iconCount; a= a+1) 
        if (this[a] == name) 
            reorder = a;             
 
    if (reorder == -1)     return; 
    tmpwin.DeleteButton(name);     
    for  (a  = reorder; a<this.iconCount; a = a +1) 
    { 
        this[a] = this[a+1]; 
        var button = tmpwin.GetControl(this[a+1]); 
        button.X = a* ICON_WIDTH;         
    } 
}

2. Crea un archivo llamado scripts\reactions.script

on "first" 
{ 
    Game.Msg("Haz algo después de la primera elección.");     
} 
 
on "second" 
{ 
    Game.Msg("Haz algo después de la segunda elección."); 
} 
 
on "third" 
{ 
    Game.Msg("Haz algo después de la tercera elección.");     
    dlgObject.removeIcon("second"); 
}

3. Escribe en scripts\base.inc

global dlgObject;

y en scripts\game.script

dlgObject = new Object("scripts\dialogueObject.script");<code> 
 
Entonces, en tu escena de prueba introduce el siguiente código: 
<code script>dlgObject.initializeDialogue("scripts\reactions.script"); 
dlgObject.insertIcon("first","icon.png","icon.png"); // mete alguna imagen real en lugar de icon.png 
dlgObject.insertIcon("second","icon.png","icon.png"); // mete alguna imagen real en lugar de icon.png 
dlgObject.insertIcon("third","icon.png","icon.png"); // mete alguna imagen real en lugar de icon.png

El esqueleto básico ha sido completado. Después de que acabe el diálogo, llama a

dlgObject.endDialogue(); y probablemente tendrás que poner la variable set Game.Interactive a True (si anteriormente era False)

Espero que te ayude. ¡Los comentarios son bienvenidos!

 
es/resource/icon_based_dialogues.txt · Last modified: 2010/03/19 22:31 by saboteur
Recent changes RSS feed Creative Commons License Driven by DokuWiki