BONKURA BLOG

仕事のメモ帳ブログ。いまのところActionScriptメイン。たまにCSSとかJavaScriptとか。

AS3版ランダムテキスト

右のナビゲーションでも使っているテキストがランダムに変わって、最後に指定のテキストに落ち着くアニメーションをAS3に移植してみました。

AS2版のほうはこちらのサイト様を参照しました。
テキストくるくるライブラリ - pandajustice.jp

ソースを読めば以外と簡単。
もうちょっと簡潔&仕様追加してAS3に移植してみました。

package 
{
	import flash.display.DisplayObjectContainer;
	import flash.text.TextField;
	import flash.events.Event;
	
	public class RandomText 
	{
		private var sourceTxt:String = "_/-=+%&$#!?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
		private var content:DisplayObjectContainer;
		private var targetFld:TextField;
		private var targetText:String;
		private var sliceCnt:int;
		private var playTime:uint;
		
		public function RandomText(content:DisplayObjectContainer, targetFld:TextField, time:uint)
		{
			this.content = content;
			this.targetFld = targetFld;
			playTime = time;
			targetText = targetFld.text;
		}
		
		public function start():void
		{
			targetFld.text = "";
			sliceCnt = 0;
			content.addEventListener(Event.ENTER_FRAME, onEnterFrame);	
		}
		
		private function onEnterFrame(e:Event):void 
		{
			++sliceCnt;
			var randomTxt:String = "";
			
			for (var i = 0; i < targetText.length; ++i)
			{
				if (sliceCnt - playTime < i)
				{
					randomTxt = randomTxt+sourceTxt.charAt(Math.floor(Math.random()*sourceTxt.length));
					continue;
				}
				randomTxt = randomTxt+targetText.charAt(i);
			}
			
			targetFld.text = randomTxt;
			if (randomTxt == targetText)
			{
				content.removeEventListener(Event.ENTER_FRAME, onEnterFrame);	
			}
		}
		
	}
	
}

使うときはこんな感じで。

package 
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	
	public class Main extends MovieClip 
	{
		private var randomText:RandomText;
		
		public function Main()
		{
			randomText = new RandomText(this, test_txt, 10);
			randomText.start();
			test_txt.addEventListener(MouseEvent.ROLL_OVER, onRollover);
		}
		
		private function onRollover(e:MouseEvent):void 
		{
			randomText.start();
		}
	}
	
}
このエントリーをはてなブックマークに追加 Save This Page to del.icio.us
  1. JayH

    挑戦してみたんですが、エラーがでます。
    使う時はこんな感じでと書いてある方(Main.as)の13行目のtest_txtという所に自分のムービクリップのインスタンス名を入れればいいのでしょうか?それとも何か違うのでしょうか?
    アドバイス頂けたらありがたいです。

  2. Anonymous

    targetFld:TextFieldと書いてあるのでテキストフィールドですね。

  3. JAYH

    >targetFld:TextFieldと書いてあるのでテキストフィールドですね。
    それはRandomText.asの26行目の""の中に文章を入れればよいと言う事なのでしょうか?

  4. bonkuraAuthor Profile Page

    インスタンス名を入れてください。
    テキストフィールドについてはFlashのヘルプをご参照ください。

  5. bonkuraAuthor Profile Page

    ちなみにRandomText.asは触りません。
    new RandomText(this, test_txt, 10);
    のtest_txtは自分が動かしたいテキストフィールドのインスタンス名です。

  6. NAO

    参照させて頂かせているのですが、
    メインフレームのアクションがわかりません。

  7. Anonymous

    メインフレームはつかってなくてドキュメントクラスですね。

  8. NAO

    ドキュメントクラスにて「Main」と設定したらさらにエラーが・・・。
    1180: 未定義である可能性が高いメソッド RandomText の呼び出しです。
    1046: 型が見つからないか、コンパイル時定数ではありません : RandomText。

    インスタンスはレイヤーにダイナミックテキストで配置してるのですが
    根本的に間違っているのでしょうか?
    初心者で申し訳ございません。
    よろしかったら教えてください。

  9. NAO

    クラス名が相違してたみたいです。
    できました。
    ありがとうございます。
    このMainの部分にbottonModeなど記述して
    リンクさせることは可能なのでしょうか?