FlashLite1.1の制作で陥るポイント

Miyuki Tsumagari

by Miyuki Tsumagari (2010年09月07日)

FlashLite1.1のコンテンツを制作するときに陥りやすいポイントを、解決方法とともにご紹介します。

使える演算子がよくわからない

文字列を連結する場合には「+」ではなく「add」を使用します。
「+」だと動きません。

1
trace("こんにちは" add "今日はよい天気ですね")

文字列を比較する場合は「eq」(もしくは「ne」(notイコール))を使う

1
2
3
4
txt1 = "こんにちは"
if(txt1 eq "こんにちは"){
	trace("おなじ!")
}
他階層のMCの参照方法

たとえば、ステージ上に配置した「hoge_mc」からルートにある他のMC(hoge2_mc)を指定する場合は以下のようにします。
▼tellTargetを使う場合(1)

1
2
3
tellTarget("../hoge2_mc"){
	//処理
}

▼もしくはルートを指定する tellTargetを使う場合(2)

1
2
3
tellTarget("/hoge2_mc"){
	//処理
}

tellTarget()なんてもうFlashLite1.x以外では使いませんもんね…。

他階層の変数を指定/参照するには?

ステージに配置された「hoge_mc」の中にある「a1」という変数をルートから参照したいとき。

1
trace(hoge_mc/:a1)

では「a1」からルートにある「a2」を参照したい場合は、

1
trace(../:a2)

となります。

functionが使え・・・・ナイッ!

FlashLiteではcall()を使ってフレームに書いてあるスクリプトを呼び出すことでfunctionの代わりにします。
たとえばこれ、FlashLite1.1の某案件で作ったルートのタイムラインなのですが、フレームごとに関数を書き分けて最終的にこんな状態になりました。カオスです。

call()で呼び出したフレームと同じタイムライン上に違うcall()があると不具合起こしそうな可能性があるので、
それぞれ1フレームづつずらして記述しています。

配列が使え・・・・ナイッ!

配列、使えません。FlashLite1.1では疑似配列(言い方カッコいいだけ)で代用します。
FlashLiteではeval関数というものがあってそれが左辺でも利用できるのでこれを活用します。
たとえば、

1
allTxt = "山田,鈴木,山下,岡,高橋"

なんていうのを

1
2
3
4
5
name1="山田"
name2="鈴木"
name3="山下"
name4="岡"
name5="高橋"

っていう感じに別々の変数に分解したい場合は下記のようにします。
※変数の命名規則は【固定の文字列+数字】です。

1
2
3
4
5
6
7
8
9
10
11
12
//allTXTをカンマ区切りで分解する
allTxt = allTxt add ",";
txtL = length(allTxt);
nowCnt = 0;
for (i=1; i<=txtL; i++) {
	nowTxt = substring(allTxt, i, 1);
	if (nowTxt eq ",") {
		cntNum++;
		eval("name" add cntNum) = substring(allTxt, (nowCnt+1), (i-1-nowCnt));
		nowCnt = i;
	}
}

では、これらをrevers()っぽくしたい時はというと、こんな感じ

1
2
3
4
5
6
7
8
9
10
11
nameMax = 5;
//逆にした値を一旦新しい変数に入れて、、、
for (i = 1; i <= nameMax; i++){
	eval("tempName" add i) = eval("name" add (nameMax - (i - 1)));
	trace(eval("tempName" add i));
}
//もう一回置き換える
for (i = 1; i <= nameMax; i++){
	eval("name" add i) = eval("tempName" add i);
	trace(("name" add i add "=") add eval("name" add i));
}

ちょっと手間がかかります。
また、こういった処理はFlashLiteは苦手らしく負荷がかかりますのでなるべく多用は避けたいところです。

スクリプトからテキストフィールドの操作が出来ない

FlashLite1.1ではテキストフィールドをスクリプトで操作することがほとんど出来ません。
出来るのはテキストの文字列を設定するくらいです。
例えばAS3でテキストフィールドの文字列を入れる場合は、

1
hoge_txt.text = "テキスト!"

だけど、FlashLite1.1では単純に

1
hoge_txt = "テキスト!"

です。
スクリプトで文字のサイズや色の変更などは出来ないので、予め使う色をムービークリップのフレームに準備しておく必要があります。

Au端末だとPHPとうまく通信できない

loadvariables()を使って通信する場合。
PCブラウザで確認したときには上手く通信ができていたのに、何故かAUの端末だけ通信がうまく出来ないなんてことありませんか?
そういう時は、PHP側に下記のコードが書かれているか確認しましょう。

1
header("Content-type:text/plain");

PHPで文字列をprintやechoする前にヘッダーの出力が必要です。

以上、思いついたことをまとめました。
色々と制限が多いFlashLiteですが、やり始めると面白いので苦手意識を持たずに作ってみて頂けると嬉しいです。