如何解决您如何在这段代码中的文本之间停顿?
我正试图在“很久以前”和此后的间隔之间停顿一下,但是我很难做到这一点。我该如何运作?我尝试使用计时器,但是我做不到,这很难实现。
这是我的代码:
var snd: textStory = new textStory();
var snd2: soundStory = new soundStory();
var myString: String = "Long ago,two races\nruled over Earth:\nHUMANS and MONSTERS.";
var myArray: Array = myString.split("");
snd2.play();
addEventListener(Event.ENTER_FRAME,frameLooper);
function frameLooper(event: Event): void {
if (myArray.length > 0) {
if (n == 1) {
tf.appendText(myArray.shift());
n = 0;
snd.play();
} else {
n++;
}
} else {
removeEventListener(Event.ENTER_FRAME,frameLooper);
}
}
解决方法
我想是这样的。这是一种数据驱动的解决方案,您在其中准备适当的数据输入,这样您的主循环(在您的情况下为 ENTER_FRAME 处理程序)就不必考虑太多,只需一次处理一个数据输入即可。
var E:Array = [""];
// It is considered a good tone to name classes
// starting with uppercase: TextStory,SoundStory.
var snd: textStory = new textStory();
var snd2: soundStory = new soundStory();
var laString:String = "Long ago";
var myString:String = ",two races\nruled over Earth:\nHUMANS and MONSTERS.";
var myArray:Array = new Array;
// Here we form an Array that starts with "Long ago"
// then 20 empty entries to skip,then the rest.
myArray = myArray.concat(tocharArray(laString));
myArray = myArray.concat(emptySpaces(20));
myArray = myArray.concat(tocharArray(myString));
snd2.play();
addEventListener(Event.ENTER_FRAME,frameLooper);
function frameLooper(event: Event): void
{
if (myArray.length < 1)
{
removeEventListener(Event.ENTER_FRAME,frameLooper);
return;
}
var aChar:String = myArray.shift();
// Just skip a frame if there's an empty character.
if (aChar == "")
{
return;
}
tf.appendText(aChar);
// Make no typing sound on space characters... I guess?
if (aChar != " ")
{
snd.play();
}
}
// Returns an Array ["","",...,""] of the given length.
function emptySpaces(length:int):Array
{
// This doubles E as many times as needed
// to allow us to make a slice long enough.
while (E.length < length)
{
E = E.concat(E);
}
// Returns a portion of E of the given length.
return E.slice(0,length);
}
// Converts the given String into an Array
// of characters and empty "" entries.
function tocharArray(value:String):Array
{
var result:Array = new Array;
for (var i:int = 0; i < value.length; i++)
{
// You can put more or less "" here to make the
// typing loop skip more than a single
// frame after typing a character.
result.push(value.charAt(i),"");
}
return result;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。