J'écris un script de dialogue Javascript qui est vu dans beaucoup de jeux de rôles typiques. À l'heure actuelle, j'ai obtenu un tableau avec des chaînes de texte que vous pouvez ignorer. J'ai obtenu au point où vous pouvez prendre une décision et basé sur l'entrée une chaîne différente montrera.Script de dialogue JavaScript requis
Cependant, je ne pense pas que ce soit la bonne façon de le faire. Ce sont les conditions requises pour le script:
- Prise en charge de plusieurs scripts de dialogue
- caractères multiples
- entrée de la décision de l'utilisateur ("Avez-vous comme moi?" -oui -NO)
Cette est mon code au moment:
// Intro script
var script_intro = [];
script_intro[0] = 'Hello how are you?';
script_intro[1] = 'So I heard..';
script_intro[2] = 'This is a cool game!';
script_intro[3] = [];
script_intro[3][0] = 'Do you like me?';
script_intro[3][1] = [];
script_intro[3][1][0] = 'Jah';
script_intro[3][1][1] = 4;
script_intro[3][2] = [];
script_intro[3][2][0] = 'Nah';
script_intro[3][2][1] = 5;
// Intro script: variation I
var script_intro_1 = [];
script_intro_1[0] = 'I love you too!';
// Intro script: variation II
var script_intro_2 = [];
script_intro_2[0] = 'Damn you...';
function initDialog()
{
// This is where the text will be shown
var dialog = document.getElementById('dialog');
var content = document.getElementById('content');
var nextButton = document.getElementById('nextButton');
var optionButton_1 = document.getElementById('optionButton_1');
var optionButton_2 = document.getElementById('optionButton_2');
// How fast the characters will appear after each other (milliseconds)
var scrollSpeed = 50;
}
// Scroll text per line, character
function scrollText(script, line)
{
var char = 0;
// If this line contains a question that requires user input
if(typeof(script[line]) == 'object')
{
var textScroller = setInterval(
function()
{
// Add the string char for char
content.innerHTML += script[line][0][char];
char ++;
if(char >= script[line][0].length)
{
clearInterval(textScroller);
// Show options
options(script, line);
}
}, scrollSpeed);
}
else
{
var textScroller = setInterval(
function()
{
content.innerHTML += script[line][char];
char++;
if(char >= script[line].length)
{
clearInterval(textScroller);
// Show next line
next(script, line);
};
}, scrollSpeed);
}
}
function next(script, line)
{
line = line + 1;
// Last line has been shown
if(script[line] == undefined)
{
//alert('End of dialog');
}
else
{
nextButton.style.visibility = 'visible';
nextButton.onclick = function()
{
nextButton.style.visibility = 'hidden';
content.innerHTML = '';
scrollText(script, line);
}
}
}
function options(script, line)
{
optionButton_1.innerHTML = script[line][1][0];
optionButton_2.innerHTML = script[line][2][0];
optionButton_1.style.visibility = 'visible';
optionButton_2.style.visibility = 'visible';
optionButton_1.onclick = function()
{
optionButton_1.style.visibility = 'hidden';
optionButton_2.style.visibility = 'hidden';
content.innerHTML = '';
scrollText('script_intro_1', 0);
}
optionButton_2.onclick = function()
{
optionButton_1.style.visibility = 'hidden';
optionButton_2.style.visibility = 'hidden';
content.innerHTML = '';
scrollText('script_intro_2', 0);
}
}
html
<body onload="scrollText(script_intro, 0)">
<h1>rpg</h1>
<a id="reset" href="#">Reset</a>
<div id="device">
<div id="dialog">
<strong>NPC:</strong>
<div id="content"></div>
<a id="nextButton" href="#">Next</a>
<a id="optionButton_1" href="#"></a>
<a id="optionButton_2" href="#"></a>
</div>
</div>
</body>
Je pourrais vraiment utiliser quelques commentaires. Quelle est la meilleure façon d'écrire un tel script avec les exigences ci-dessus? L'utilisation de JSON ou XML est-elle une meilleure option qu'un tableau pour les scripts de dialogue? J'ai particulièrement besoin de quelques conseils sur la façon d'implémenter plusieurs choix dans le script.
Merci!
Bon choix. Cependant, vous avez une erreur: 'start' est indéfini. Je crois que vous vouliez dire 'startState.transitionsOut.push (this);' –
Oui, lemme corrige, merci. – Zoidberg
Merci pour le conseil. J'ai trouvé un bel article sur IBM: ibm.com/developerworks/web/.... Regarde tout nouveau et compliqué mais je vais étudier :) Merci pour l'exemple, aussi. Plus de conseils sont les bienvenus. – richard