通常テキストフィールドのtextプロパティにはString型のデータを入れなくてはならない。
以下のように書くとエラーとなるのは既知。
//FlashIDEでのメインタイムラインにダイナミックテキストを配置
//インスタンス名:_txt
//メインタイムラインフレームアクション
_txt.text = 1000;
1067: 型 int の値が、関連しない型 String に暗黙で型変換されています。
ここでエラーにならず代入できちゃうケースがあることに気付いた。
やりかたは簡単TextFieldをMovieClipでラップする。
//FlashIDEでのメインタイムラインにMovieClipを配置
//インスタンス名:_mc
//_mcのタイムラインにTextFieldを配置
//インスタンス名:_txt
//メインタイムラインのフレームアクション
_mc._txt.text = 1000;
これはエラーにならずにTextFieldにちゃんと文字が表示される。
ちょっと気持ちわるい。
MovieClipにおいて、特定のフレームのフレームアクションを実行することができるメソッドがあります。
任意のフレームのスクリプトを実行:frame + “フレーム数” + ();
たとえば、ステージに_mcというインスタンス名でMovieClipが配置してある場合。
(_mcには1,2,3フレームにスクリプトが書いてある)
frame+フレーム数というメソッドを実行することができます。
//_mc:ステージに配置してあるMovieClipインスタンスで
//1,2,3フレームにスクリプトが書いてあり、内容は以下の通り
//1フレーム目には、trace("_mc 1フレーム");
//2フレーム目には、trace("_mc 2フレーム");
//3フレーム目には、trace("_mc 3フレーム");
_mc.frame1(); //出力:_mc 1フレーム
_mc.frame2(); //出力:_mc 2フレーム
_mc.frame3(); //出力:_mc 3フレーム
このとき以下のようなエラーが発生するときがある。
TypeError: Error #1006: frame1 は関数ではありません。
at _fla::MainTimeline/frame1()
このときの原因の一つは、実行対象のMovieClipにリンケージ指定されているということ。
リンケージ指定した状態で、任意のフレームのスクリプトを実行しようと上記のようなエラーになるらしい。
また、動的に生成したMovieClipインスタンスについても、addFrameScript()メソッドでフレームにスクリプトを追加した場合についても、同じ結果になるようす。
以下、例
var mc:MovieClip = new MovieClip();
addChild(mc);
//ムービークリップの1フレーム目にファンクション:testを追加
mc.addFrameScript(0,test);
function test():void{
trace("mc script")
}
mc.frame1()//上記のようなエラーが発生する
ということは、動的に生成したmcにaddFrameScript()でファンクションを追加しても実行する術はないということ!?
まぁ理由はわからないけどそんな挙動をするみたい。
まぁ、こんなのそうそう使わないけども。
Tags: AS3, Flash