创建打字机效果的最佳方法是什么?

时间:2015-07-07 07:59:53

标签: actionscript-3 flash type-conversion flash-cs6

嘿大家所以我正在创建一个专注于角色与角色互动的游戏。因此,当您与角色互动时,聊天框会打开,角色会开始互相交谈。我的文字设置就像旧式学校打字机效果一次一个字母。到目前为止,我通过在不同的框架上键入每个字母并让它们播放来创建它。当它到达然后句子结束以便用户继续下一句话我有一个按钮,他们点击这里是代码:

private function nextConvo(e:MouseEvent):void 
    {
        nNext += 1;
        trace(nNext);

        if (nNext == 1)
        {
            conversation.gotoAndPlay(1);
        }else
        if (nNext == 2)
        {
            conversation.gotoAndPlay(117);
        }
    }

正如你所看到的,我把它设置为播放新对话的下一帧,依此类推。我有更多的文字要做,我意识到这将是非常耗时的,并想知道是否有一个更简单的方法。

在文本框中键入字符串的方法,我仍然可以使用我的按钮,因此当用户想要查看下一个对话时,他们可以按下一个按钮。

我在这里看到一个视频,其中有人展示了这样做的代码方式,但不确定如何实现按钮而不必添加许多新的鼠标监听器和定时器。 Code Method

请任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

Omg,是的,如果每帧显示一个字符,你会发疯的。)

我们的想法是为你提供一个函数来处理你在某处(例如,在你的主时间轴上)。然后你可以从任何地方调用它,只需传递文本,textfield键入和按钮。

private var _myText:String;
private var _myTextField:TextField;
private var _myButton:Button;
private var _currentCharacterPosition:int;

public function typeText(text:String, myTextField:TextField myButton:Button):void
{
    _myText = text;
    _myTextField = myTextField;
    _myButton = myButton;
    _myButton.visible = false;
    _currentCharacterPosition = 1;
    typeNextCharacter();
}

private function typeNextCharacter():void
{
    _myTextField.text = _myText.substr(0, _currentCharacterPosition);

    if (_currentCharacterPosition == _myText.length)
    {
        // all text is typed out, show your button
        myButton.visible = true;
    }
    else
    {
        // type next character. 0.2 is the delay between letters (200 ms)
        _currentCharacterPosition++;
        setTimeout(typeNextCharacter, 0.2);
    }
}

假设您在同一个地方(相同的框架)中有文本字段和按钮,那么您可以在该框架中执行此操作:

_root.typeText("This is my text to type out", myTextField, myButton);