この間書いた「文字列が横スクロールする AIR アプリ」の続き。
この間は、右から現れた文字列が左端までスクロールしてくるところまで作った。今回は、Label の左端までスクロールして一旦停止後、今度はそのまま左側にスクロールしながら消えていく動きを追加。
左端までスクロールさせる timer イベントが終了した時に実行される timerComplete イベントで「その後、文字が更に左にスクロールして消えていく」処理を呼び出します。
「その後、文字が更に左にスクロールして消えていく」処理の中では、また別の timer イベントを発生させ、文字列が空になるまで処理繰り返します。
文字列が空になるまで処理を繰り返すのは、「左スクロール」の動きを、文字列の一文字目の文字を削除しては表示を繰り返すことで実現しているからじゃね。
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
initialize="initProc();" width="367" height="109"><mx:Script>
<![CDATA[// グローバル変数
public var TextData:String = "わたしは宇宙からきたゴリ星人だ。多分、そうだ。"; // 表示文字列
// 定数
public static const MAX_TEXT_SIZE:int = 40; // text1 に表示できる最大文字数private function initProc():void {
var timeCheck:Timer = new Timer(100, MAX_TEXT_SIZE + 10);
timeCheck.addEventListener(TimerEvent.TIMER, onTick);
timeCheck.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete); // 左端まで移動した後の処理
timeCheck.start();}
// ラベルにセットする文字列の編集
private function onTick(event:TimerEvent):void {// 時間が経過する毎に、表示文字列の前に挿入する全角スペースの数を減らしていく
var blankCnt:int = MAX_TEXT_SIZE - event.target.currentCount;
if (blankCnt <= 0) {
label1.text = TextData;
}
else {
label1.text = (new Array(blankCnt).join(" ")) + TextData;
}}
private function onTimerComplete(event:TimerEvent):void {
// 文字列の文字数分だけ処理を行う
var timeCheck2:Timer = new Timer(100, TextData.length);
timeCheck2.addEventListener(TimerEvent.TIMER, onTick2);
timeCheck2.start();}
// ラベルにセットする文字列の編集
private function onTick2(event:TimerEvent):void {// 時間が経過する毎に、表示文字列の一番前の文字を削除
TextData = TextData.substr(2);
// ラベルにセット
label1.text = TextData;}
]]>
</mx:Script>
<mx:Label x="41" y="24" text="この下に文字が流れながら表示されます"/>
<mx:Label x="41" y="50" width="279" id="label1"/></mx:WindowedApplication>
こんな感じ。
だいぶ前のエントリなのでコメントするのに気が引けますが・・・。
TextDataとかMAX_TEXT_SIZEって、privateで大丈夫な気がします。
コメントありがとうございます。最近スパムコメントが本当に増えたので、コメントの承認をしばらくサボっておりました。申し訳ありません。
ところで、
>TextDataとかMAX_TEXT_SIZEって、privateで大丈夫な気がします。
多分、おっしゃるとおりなのでしょう。
AS を触り始めたばかりで、複数の private function から呼ばれる値は public 宣言する必要があるのかな・・・と当時思ったのだと。
現在、AS の仕事が途切れているので開発環境が手元にないのですが、今度、機会があればソースを修正して試してみようと思います。
ありがとうございました。