- 締切済み
ActionScript(携帯)について
ActionScriptで,携帯の電池の容量に応じて文字(ダイナミックテキスト)の色を変えていく方法をやりたいのですが,やり方がよくわかりません。 fscommand2("GetBatteryLevel")が3のとき,緑 fscommand2("GetBatteryLevel")が2のとき,橙 fscommand2("GetBatteryLevel")が1または0のとき,赤 という風にやりたいと思っています。 下の方法でやってみたらできませんでした。どこが間違っているのか,教えていただきたいと思います。よろしくお願いします。 battLvl = fscommand2("GetBatteryLevel"); switch (battLvl) { case 3 : battLvl.color = 0x00FF00; break; case 2 : battLvl.color = 0xFF8000; break; case 1 : battLvl.color = 0xFF0000; break; default : battLvl.color = 0x00FF00 }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1 です。 > Flash Lite 1.1でした。これで出来るやり方も教えていただけますでしょうか。 Flash Lite 1.1 では, 「スクリプトで」テキストの文字の色を変えることはできませんから, 「手動で」 テキストの文字色を変えます。 手動で変えるのだと動的に変えられない(場合によっていちいち作り替えなければならない)。 と思うかもしれませんがそれは大間違いです。 Flash Lite 1.1 の修行が足りないということです。 例えば, 1つのムービークリップ内の フレーム1 に 「黒色文字」のテキストフィールドを用意します。 そののムービークリップ内の フレーム2 に 「赤色文字」のテキストフィールドを用意します。 そのムービークリップ内の フレーム3 に 「青色文字」のテキストフィールドを用意します。 そのムービークリップ内の フレーム4 に 「緑色文字」のテキストフィールドを用意します。 Flash Lite 1.1 ですから, ムービークリップ内のテキストフィールドにはちゃんと変数名を付けておきます。 ※インスタンス名は付けられません。 全部同じ変数名で良いです。 たとえば元の通り「battLvl」という変数名を付けることにしておきます。 そしてそのテキストフィールド入りのムービークリップには「インスタンス名」を付けます。 たとえば 「batt_mc」 というインスタンス名を付けます。 そしてスクリプトを次のような感じに書き換えます。 ----------------------------------------------- // 変数 battLvl の値が仮に 2 だったとする battLvl = 2;//fscommand2("GetBatteryLevel"); // batt_mc 内の変数 battLvl にこの階層の battLvl の値を代入 batt_mc/:battLvl = battLvl; switch (battLvl) { case 3 : // ムービークリップ「batt_mc」に命令 tellTarget ("batt_mc") { // フレーム2 に進んで止まりなさい gotoAndStop(2); } break; case 2 : tellTarget ("batt_mc") { gotoAndStop(3); } break; case 1 : tellTarget ("batt_mc") { gotoAndStop(4); } break; default : tellTarget ("batt_mc") { gotoAndStop(1); } } -----------------------------------------------
- BlurFiltan
- ベストアンサー率91% (1611/1754)
「テキストフィールド」 と 「変数」 と 「テキストフォーマット 」 が 頭の中でごちゃごちゃになっていませんか? また テキストフィールド の文字色を ActionScript によって変えられるのは Flash Lite 2.0 以降ですが,そこのところもよろしいのでしょうか? スクリプトを見る限り, なんだか テキストフィールド に 変数名 を付けていらっしゃるように思います。 おそらく Flash Lite 1.x ではないのですから, テキストフィールド に 変数名 を付けてはいけませんよ。 Flash 8 のヘルプ 「テキストフィールドのインスタンス名と変数名について」 http://livedocs.adobe.com/flash/8_jp/main/00001418.html まず テキストフィールド の 変数名 を消して, その変数名ではない別の名前の "インスタンス名" を付けます。 たとえば 「battLvl_txt」 というインスタンス名を付けます。 そして次のようなスクリプトを書きます。 ------------------------------------------ // TextFormatクラスのインスタンス 「txt_fmt」 を作成 txt_fmt = new TextFormat(); // 変数 battLvl の値が仮に 2 だったとする battLvl = 2; //fscommand2("GetBatteryLevel"); // テキストフィールド インスタンス 「battLvl_txt」 に // 変数 battLvl の値を表示 battLvl_txt.text = battLvl ; switch (battLvl) { case 3 : // 「txt_fmt」の color プロパティを 0x00FF00 にする txt_fmt.color = 0x00FF00; break; case 2 : // 「txt_fmt」の color プロパティを 0xFF8000 にする txt_fmt.color = 0xFF8000; break; case 1 : // 「txt_fmt」の color プロパティを 0xFF0000 にする txt_fmt.color = 0xFF0000; break; default : // 「txt_fmt」の color プロパティを 0x00FF00 にする txt_fmt.color = 0x00FF00; } // テキストフィールド インスタンス 「battLvl_txt」 に // TextFormat 「txt_fmt」 を適用 battLvl_txt.setTextFormat(txt_fmt); ------------------------------------------ color プロパティ は テキストフォーマット(TextFormat)クラスのプロパティです。 テキストフィールド(TextField)クラスのプロパティではありません。 テキストをフォーマットするインスタンスを作成して, そのインスタンスのフォーマットプロパティを色々指定して, テキストフィールドインスタンスにそのテキストフォーマットを適用させます。 すると,テキストフィールドインスタンスの中のテキストが指定通りにフォーマットされます。 または,TextFormatクラスの color プロパティ ではなく, TextFieldクラスの textColor プロパティ を使用します↓。 ------------------------------------------ // 変数 battLvl の値が仮に 2 だったとする battLvl = 2; //fscommand2("GetBatteryLevel"); // テキストフィールド インスタンス 「battLvl_txt」 に // 変数 battLvl の値を表示 battLvl_txt.text = battLvl ; switch (battLvl) { case 3 : battLvl_txt.textColor = 0x00FF00; break; case 2 : battLvl_txt.textColor = 0xFF8000; break; case 1 : battLvl_txt.textColor = 0xFF0000; break; default : battLvl_txt.textColor = 0x00FF00; } ------------------------------------------ 上の2つのどちらにする場合であっても, 「テキストフィールドをインスタンスとして扱わなければならない。」 ということになります。 ですから テキストフィールド に インスタンス名 が必要になります。 Flash Lite 1.x や Flash Player 5 以下では, テキストフィールド はインスタンスとして扱えなかったのです。 つまり, テキストフィールド の文字色どころか, テキストフィールド の x座標 や y座標 すら ActionScript で指示できなませんでした。 テキストフィールド は,単に 「変数の値を表示するだけのもの」,「変数の値を入力するだけのもの」 として存在していました。 とにかく 「先に変数ありき」 です。 わかりますでしょうか,このニュアンス。 「マイ筆箱に名前を書く」 このニュアンスに近いイメージです。 筆箱に「鈴木」という名前が書いてあっても,筆箱の名前が「鈴木」なのではありません。 鈴木さんが先にいてその鈴木さんの筆箱だから鈴木と書いてあるのです。 「鈴木さんに対応する筆箱が鈴木と書いた筆箱。」 テキストフィールドの「変数名」は, 「テキストフィールドが対応する変数を指定するもの」 であって, テキストフィールドを表す名前でも何でもありません。 ActionScript 3.0 では, このテキストフィールドの「対応変数指定」は完全に無くなりました。 ※ 変数名を「付けてはならない」ではなく「付けられない」になった。 ※ 「インスタンスの変数名はそのインスタンスへの参照を示す。」 ということになった(意味が全然違う)。 テキストフィールド に変数名を付ける代わりに インスタンス名 を付けて, その テキストフィールドインスタンスの text プロパティに文字列や数値を代入するようにして, テキストフィールド に文字列や数値を表示させます。 ↓この部分↓ // テキストフィールド インスタンス 「battLvl_txt」 に // 変数 battLvl の値を表示 battLvl_txt.text = battLvl ; ※ なお私は実機での検証を全くしていません。 ですから, // 変数 battLvl の値が仮に 2 だったとする battLvl = 2; //fscommand2("GetBatteryLevel"); というように 変数 battLvl に仮の値を代入して, fscommand2("GetBatteryLevel"); はコメントアウトしています。
補足
ご丁寧にありがとうございます。 申し訳ありませんが,確認してみたところ,Flash Lite 1.1でした。これで出来るやり方も教えていただけますでしょうか。なにせ,Flashについては超初心者なもんで…。よろしくお願いします。無理だったらFlash Lite 2.0でやってみようと思います。