2014-01-22 72 views
0

所以這可能是一個非常簡單的答案,但我無法弄清楚。我正在製作一個遊戲,其中對話框具有這種打字機效果,我希望文字在進入另一個框架時發生變化。 (textF是我的動態文本框的實例名稱)。Flash ActionScript 3.0 Typewriter Dialiouge Box

var myString:String = "Howdy Howdy Howdy Howdy\n\n Howdy"; 
var myArray:Array = myString.split("") 
addEventListener(Event.ENTER_FRAME, frameLooper); 
function frameLooper(event:Event): void { 
    if (myArray.length > 0) { 
     textF.appendText(myArray.shift()); 
    } 
    else { 
     removeEventListener(Event.ENTER_FRAME, frameLooper); 
    } 
} 

現在我想將文本從「你好......」喜歡改變「然後太陽從東方升起」,當它進入下一幀。

我該如何編碼?感謝任何能夠回答這個問題的人......如果我感到困惑,我可以重新回答這個問題。

回答

0

有很多方法可以做到這一點。由於您使用的是ENTER_FRAME事件,這裏有一個相對的工作示例:

//Create 3 variables, 1 for your current text, time, and speed 
import flash.utils.getTimer; 

//remove access modifiers if you are doing this in the timeline 
private var beginTime:Number; 
private var currentText:String 
private const SPEED:int = 100; 

//set the current text and begin time, then add your listener 
beginTime = getTimer(); 
currentText = "Howdy...And then the sun rises in the east"; 

addEventListener(Event.ENTER_FRAME, frameLooper); 

//then in your frameLooper() 
function frameLooper(event:Event): void { 
    //add character at index 0 of currentText 
    if (getTimer() - beginTime >= SPEED) { 
     beginTime = getTimer(); 
     textF.appendText(currentText.slice(0, 1)); 
     currentText = currentText.substr(1, currentText.length); 
    } 
} 

您可以調整SPEED不斷給任何你喜歡的。這只是使用ENTER_FRAME事件來處理當前想法的一種方法。

此外,如果你想有一個更現實的類型作家的效果,你可以做SPEED非常變量,然後if語句if (getTimer() - beginTime >= SPEED)裏面,你可以隨機的速度變量:

SPEED = Math.floor(Math.random() * (200 - 100) + 100); 

這將讓你變化的速度在100-200ms範圍內,你可以改變。

+0

它看起來不錯,但我想從上一幀進入下一幀時刪除所有文本。因此,在一個框架中,文本字段只會讀取,比如說,「你好」,在下一幀中,它會寫明「太陽在東方升起」(不是「你好」)。 – user3224837

+0

沒關係,我發現如何去做。謝謝你的幫助! :d – user3224837