Think About it



Home > Blog

20080311

引越し

少し趣向を変えて、こちらに引っ越しました。

http://www.mrlittlebig.com/blog/ - trace

Flashのみではなく雑談も増えましたが、
引き続き、よろしくお願いします。

USK

----------------------------------------------------------------------------------------------------

20080227

Flash Lite1.1

取り急ぎのメモ。

Flash Lite1.1における階層のパスの取り方がかなり違う。

PC用のASだと、たとえば、MovieClip A_mcから、同じタイムライン上にある、
B_mcを参照したいとすると、
_parent.B_mc
で、事足りる。

しかし、Flash Liteだと、.(ドットシンタックス)が使えない。
代わりに、/(スラッシュ)を使用する。
ディレクトリのパスの参照と似ている。

これで上記のパスを書き直すと、
../B_mc
と、なる。
../が_parentの代わり。
ちなみに、_rootは、頭に/のみで書く。
間を繋ぐ.(ドット)は、/で書く。

さらに、上記の用に、../B_mcと書くと、B_mcはムービークリップに限定される。
変数を参照した場合はどうすればいいかというと、
../:bNum
のように、/のあとに、:(コロン)をつける。これで、一階層上のbNumという変数にアクセスした事になる。

ケータイFlash ラボ!! - http://mobilef.jugem.jp/?cid=4

あと、違ったのが、onEnterFrameがない。

これは、タイムラインを二つ使って、入ったりきたりさせることで解決。

教えて!goo - Flash Lite1.1ではonClipEvent(enterFrame)が使えません。ではどうすれば?


それと、functionがない。

これは、再生されないタイムラインのヘッド上に、参照したいスクリプトを書き、
そのヘッドにフレーム名、たとえば、testとつける。
そして、そのスクリプトを呼び出すには、call()を使う。
call("test");
のようにしてやれば、testと、ラベルのつけられたフレームのスクリプトを、
そのフレームにいかずに実行してくれます。


あと、もう一つ。
onEnterFrame()がない、ということなので、
たぶん、onClipEvent()もない。
(たぶん、on()しかない)
なので、onClipEvent(load)として、ロードした時になにかの処理をさせてやれない。
そうするにはタイムラインから書くしかない。

そこで登場するのが、tellTarget()。
これを使うと、指定されたムービークリップにスクリプトがかかれたことと同じになる。
たとえば、test_mcというムービークリップがあったとして、
そいつにスクリプトを適用させるには、
tellTarget(test_mc){ 実行させたい処理 }
と、書いてやるとよい。
※処理の中かからメインのタイムラインを参照したい時は、一階層上なので、../としないといけない。

これで、実行させたいムービークリップがあるタイムライン上に、
処理を書いてやれば、onClipEvent(load)と同じ効果が得られる(はず)。


参考:Adobe デベロッパーセンター - iモード用 Flash 開発講座

==追記==(疑問)
gotoAndStop、gotoAndPlayなどは、ムービークリップ内に書いていても、
tellTarget内に書いていても、メインのタイムラインが参照される?
(分けたい時はシーンで分ける?)
gotoAndStop("label");のように、ラベル名で指定すると、
ルートのタイムライン上のものはきちんと動作するけど、
ムービークリップ内など、ルートのタイムライン上以外のものは動かない。
Flash Lite1.1では、直接フレーム数で指定する方が無難。
(マニュアルにもラベル指定は書かれていない。
Flash Lite2以降の説明には書かれている。)

Labels:

----------------------------------------------------------------------------------------------------

20080125

Flash + HTML(2)


HTML側からFlashに変数を渡す場合、
以前に書いたように
swfを読み込んでいる部分に&をつけることで簡単に処理できます。

それと似たような処理で、表示しているHTMLのURLから変数を渡してみます。
(javaScriptがメインとなります)

考え方としてはswfのURLに直接変数を書き込む方法と同じで、
HTMLのURLの末尾に変数を付加し、
それをJavaScriptで読み込み、
それをswfに渡す、という方法になります。

具体例。

swfを読み込む側のHTMLに以下のJavaScriptを記述。
var str = location.search;
str = str.substring(1,str.length);


このページへのリンクを以下のように記述。
<a href="xxxx.html?1">Link</a>


これで、読み込み側のHTMLの変数、strに、「1」が入ります。
※location.searchで、URLの?からを取得できます。
この例では、「?1」となります。
なのでそこから1だけを、substringで取り出しています。

あとは、この変数をswfに入れてやるだけです。

これは、swfを読み込んでいる部分をJavaScriptで吐き出すように書いてやり、
swfのURLの後ろに、&=strといれてやるだけです。

・param
document.write('<param name="movie"
value="xxxx.swf?flag='+str+'">\n');

・embed
document.write('<embed src="top.swf?flag='+str+'" quality="high"
bgcolor="#ffffff" width="750" height="214"
align="" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer">\n');

※swfのURLを読み込むところのみ記述。
どっちも一行です。

これを、FlashVarsを用いて、変数を渡してやることもできます。
document.write("<param name=\"FlashVars\" value=\"flag="+str+"\" />");

・embedは割愛。

さらに、これをswfObjectを使用するとさらに簡単になります。
記述部分に、以下のパラメータを足してやるだけです。
so.addVariable("flag", str);

詳しくはこちら。

FLASH-JP.COM フォーラム - リンクされたURLの引数を変数として受け取る。

参考:
A LOT - JavaScriptで変数受け取りの巻

----------------------------------------------------------------------------------------------------