都道府県穴埋めゲーム

 現在、特定のムービークリップに格納されている、2つのムービークリップ間で変数(dropのbtypeとcursorのtype間)をやりとりするプログラムを組んでいるのですが、まだ、Flash Liteの技術が未熟なため、

for(i = 0; i < 2; i++){
  tellTarget("drop" add i){
    ../:n = btype;
  }

  tellTarget("cursor" add i){
    type = ../:n;
  }
}

と、少々回りくどい記述をしてしまいます。

個人的には

tellTarget("cursor" add i){
  type = eval("../drop" add i add ":btype");
}

のように簡潔に記述できたらよいと思っているのですが、上記の方法では、typeはundefinedとなるため、文法としては正しくありません。

 コードをスマートに記述できる方法をご存じの方がおられれば、ご教示ください。

A 回答 (2件)

配置は


_root.drop1.btype
_root.cursor1.type
という階層ですよね?
(以降、説明のときは分かりやすいようにPC用Flashのパス表現で書いてます)

_root上に
tellTarget ("cursor" add 1) {
trace(eval("../drop" add 1 add ":btype"));
}
と書くと_root.drop1.btypeの値を得ることができました。

しかし「1」の部分をiに変えるとundefinedが返ってきました。(ちゃんとFor文書きました)

おそらくtellTarget(){ }のなかに書いた i は
「"cursor" add i」というMCの中のiを指しているからだと思います
(i=1のときだと_root.cursor1.iの値を指しておりもちろんundefined)。
つまりパスが通っていないのでundefinedが返ってくるのでしょう。

なので、
for (i=0; i<=1; i++) {
tellTarget ("cursor" add i) {
x = eval("..:i");
type = eval("../drop" add x add ":btype");
}
}
のように_root上の i の値を取得してやればいいと思います。
    • good
    • 0
この回答へのお礼

tellTarget内はすべて指定したターゲット内の変数が取得されるということですね。tellTargetの「クセ」がよくわかりました。ありがとうございます。

お礼日時:2006/02/09 19:35

Flash Lite は ほとんどわからない者です。


でも,Flash 4 なら結構わかっているつもりの者です。

書かれているスクリプトを Flash 4 で書くとこうなります。


 Set Variable:"i" =0
 Loop While (i < 2)
  Begin Tell Target ("drop" & i)
   Set Variable:"../:n" =btype
  End Tell Target
  Begin Tell Target ("cursor" & i)
   Set Variable:"type" =../:n
  End Tell Target
   Set Variable:"i" =i + 1
 End Loop


for文はまだ存在してなかったので,先に i という変数の初期値を設定しておいて,
Loop文でループさせるのです。

以上は,書いてみただけでどうでも良いことです。

質問者さまは,すんごく,よく考えられたと思います。
いったん, _root の架空の変数 n に逃がしておいて,
_root.n を cursor0 と cursor1 の変数 type に代入するのですよね。
すごい方法だと感動しました。


でも,いちいち,Tell Target しなくても良いのです。
Tell Target をするから,_root.n を経由しなければならなくなります。
Flash 4 で, _root.n を経由せず,変数だけをやりとりする場合は次のようになります。


 Set Variable:"i" =0
 Loop While (i < 2)
  Set Variable:"cursor" & i & "/:type" =Eval("drop" & i & "/:btype")
  Set Variable:"i" =i + 1
 End Loop


私がわかるのは,ここまでです。

後は,ソフトに成り行きを任せました。
上記,Flash 4 の FLA ファイルを Flash 8 で開くと自動変換されて,
上記スクリプトが次のようになりました。


i = 0;
while (Number(i)<2) {
set("cursor" add i add "/:type", eval("drop" add i add "/:btype"));
i = Number(i)+1;
}


これを,for文を使って書きかえると,次のようになります。


for (i = 0; i < 2; i++) {
set("cursor" add i add "/:type", eval("drop" add i add "/:btype"));
}


これが,良い形かどうかは,Flash Lite の専門ではないのでよくわかりません。
でも,Flash 8 で,Flash Lite 1.1 でのパブリッシュの設定にして,
携帯デバイスを選択してみたら,ちゃんと変数は受け渡されました。

参考になるかどうかはわかりませんが,
一応,書かれているスクリプトよりは短くなって,実際に使えるスクリプトだと思います。
実際に使えることと,文法上正しいことは別なので,良いスクリプトかどうかはわかりません。
ご了承ください。
    • good
    • 0
この回答へのお礼

Flash 4スクリプトでは短い行内で関数と変数を同時に処理するのは難しいようですね。参考になりました。

お礼日時:2006/02/09 19:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報