• 締切
  • すぐに回答を!

ActionScript(携帯)について

  • 質問No.5105657
  • 閲覧数878
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 57% (8/14)

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件)

  • 回答No.2

ベストアンサー率 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);
}
}
-----------------------------------------------
  • 回答No.1

ベストアンサー率 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");
  はコメントアウトしています。
補足コメント
yamappi008

お礼率 57% (8/14)

ご丁寧にありがとうございます。
申し訳ありませんが,確認してみたところ,Flash Lite 1.1でした。これで出来るやり方も教えていただけますでしょうか。なにせ,Flashについては超初心者なもんで…。よろしくお願いします。無理だったらFlash Lite 2.0でやってみようと思います。
投稿日時:2009/07/09 15:20
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ