重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

WindowsXPのProfessional環境でFlash Lite1.1を
使用しています。実現したい動作は以下です。

外部テキストファイルから取得したデータ(複数)を
画面に表示させてそれをボタン操作で上下に動かす。

<画面表示イメージ>
aaa
bbb
ccc
ddd

aaaからdddまでが外部から取得するデータです。
可変で表示数は増減します。
それを外部テキストから取得します。

動作ですが"8"キーを押下したときに、aaaとbbbが
逆転し、もう一回押すとaaaとcccが逆転します。

こうなります。
bbb
ccc
aaa
ddd

1.外部データの表示はテキストフィールドにはで
  きています。(loadVariable使用)

2.データを動かすためにムービークリップをボタン
  アクションで動作もできています。

上記1と2を合わせた動作が出来ません。

flashlite1.1ではテキストフィールドにインスタンス
名が付けられないので、動かすことが出来ないと考え
ています。

ならばとムービークリップにloadVariableを使って
読みこませようとしたら、どうもloadVariableとい
う関数は値を内部的に持てるだけで、表示させられ
る訳ではない、という事が判ってきました。

そこで詰まってしまったのです。

外部から取得したデータを表示→ボタン操作という
動きはflashlite1.1では出来ないのではと怪しみ始
めています。

ここの過去ログやgoogleで検索しても、このような
動きを検証しているものが見つけられませんでした。

携帯での動作を考えており、flashlite1.1を使用し
ています。

上記について知識のある方、または手がかりとなる
ホームページをご存知の方、回答頂けると助かります。

長々と記述して申し訳ありません。

A 回答 (1件)

???


なんか複雑に考えすぎてませんか?


Flah Lite でも 普通の Flash でも,
表示されているデータを入れ替えるときは,
テキストフィールドの配置を入れ替えるのではなくて,
値だけを入れ替えるものではありませんか?

外部テキストのテキストデータのファイル名を「data.txt」とし,
その「data.txt」内のデータが

----------------------
myText1=aaa&
&myText2=bbb&
&myText3=ccc&
&myText4=ddd
----------------------

であったとします。
フレーム1に次の2行を書きます

-----------------------
loadVariablesNum("data.txt", 0);
flag = 0;
-----------------------

これで,_level0(_root) に「data.txt」のデータがロードされます。

そして,ステージ上には上から順に,
「myText1」 「myText2」 「myText3」 「myText4」という変数名のテキストフィールドを用意しておけば,
それぞれに
「aaa」 「bbb」 「ccc」 「ddd」 が自動的に表示されます。

ボタンを用意して,
そのボタンに

------------------------
on (release, keyPress "8") {
if (flag == 0) {
flaText1 = myText1;
flaText2 = myText2;
myText1 = flaText2;
myText2 = flaText1;
flag = 1;
} else if (flag == 1) {
flaText2 = myText2;
flaText3 = myText3;
myText2 = flaText3;
myText3 = flaText2;
flag = 2;
}
}
------------------------

と書けば,
1回目の キー8 では 「aaa」 と 「bbb」 が入れ替わり,
2回目の キー8 では 「aaa」 と 「ccc」 が入れ替わるので,
表示は

bbb
ccc
aaa
ddd

となります。
その後の キー8 では無反応です。



===============================

上記で普通は行けると思いますが,
あえて,テキストフィールドを動かす場合の話です。


>> flashlite1.1ではテキストフィールドにインスタンス
>> 名が付けられないので、動かすことが出来ないと考え
>> ています。

なぜ…?
どうしてそういう風に考えるのでしょう。
付かなければ付くようにすば良いだけですよ。
普通の Fash でも,
シェイプ(単なる絵) に インスタンス名 を付けたければ ムービークリップ にします。
それと同じで,
テキストフィールドもムービークリップに変換すれば良いだけです。

ただ,
ムービークリップにした場合,
普通のFlashと同じで少し階層が難しくなることと,
ロード待ちを入れないとならないところが面倒です。


まず,
「mcText」という変数名のテキストフィールドを用意します。
それを ムービークリップ に変換します。

そして,そのテキストフィールド入りの ムービークリップ をコピペで4つにします。
そして,縦にならべて上から順に,
「myMC1」 「myMC2」 「myMC3」 「myMC4」 というインスタンス名を付けます。

フレーム1にロードするスクリプトのみを書きます。

--------------------------------------
loadVariablesNum("data.txt", 0);
--------------------------------------

これで,_level0(_root) に「data.txt」のデータがロードされます。

フレームを2つ追加して,全体で3フレームにします。
2フレーム目をキーフレームにして,次のようなスクリプトを書きます。

--------------------------------------
/myMC1/:mcText = myText1;
/myMC2/:mcText = myText2;
/myMC3/:mcText = myText3;
/myMC4/:mcText = myText4;
--------------------------------------

3フレーム目もキーフレームにして,次のようなスクリプトを書きます。

---------------------------
if (myText4 eq "") {
gotoAndPlay(2);
} else {
stop();
}
---------------------------

これで,
「myMC1」~「myMC4」までに
「aaa」~「ddd」が表示されますから,
あとは自由に動かしてください。

loadVars が使えないので,
ロード待ち処理が少しやっかいになるだけです。
完全にロードが終わるまで,フレームをループさせています。
でもそれだけのことで,loadVars よりはわかりやすいと思います。


フレーム2 のスクリプトですが,
いちいち1変数を1変数に代入していっています。
もっと変数が多い場合は,
eval を使用して for文で回しても良いです。

--------------------------
for (i=1; i<=4; i++) {
set("/myMC" add i add "/:mcText", eval("/:myText" add i));
}
--------------------------



以上です。
変数の値を入れ替える方法でも,
テキストフィールドの座標を変える方法でも,
どちらでもできます。


※私は,携帯というものを持っていないので
  実際の携帯では動作確認をしていません。
  上の確認は,Flash のムービープレビュー
  (デバイスは携帯)で確認しているだけです。
  その点はご了承ください。
    • good
    • 0
この回答へのお礼

sassakunさん、丁寧な御回答有難うございます。
非常に参考になりました。

>>テキストフィールドもムービークリップに変換す
>>れば良いだけです。
まさしくその通りでした。最初に作成した物では矩形
ツールで作成したものをムービークリップに変換して
いました。

その状態で表示させようと躍起になっていたので、
値は変数として使えましたが、Flash画面上に表示
されない状況でした。

テキストツール→ムービークリップに変換したら、
値が表示されてボタンアクションで動作も出来ました

>>テキストフィールドの配置を入れ替えるのではな
>>くて,値だけを入れ替えるものではありませんか?
何故かこの考えは思いつきもしませんでした・・・
そうですね、値の受渡しで良かったんですね。。。

「パラメータ変化ではなく、実際に座標を動かすに
はムービークリップで!」という考えにとらわれて
しまいました。

ソース付での丁寧な御解説、非常に判り易かったです
しかも、evalの活用法まで記述して頂いたので、活用
しようと考えています。

重ね重ね有難うござました。

お礼日時:2006/05/10 13:46

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