• 締切済み

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 }

  • Flash
  • 回答数2
  • ありがとう数4

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#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)
回答No.1

「テキストフィールド」 と 「変数」 と 「テキストフォーマット 」 が 頭の中でごちゃごちゃになっていませんか? また テキストフィールド の文字色を 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
質問者

補足

ご丁寧にありがとうございます。 申し訳ありませんが,確認してみたところ,Flash Lite 1.1でした。これで出来るやり方も教えていただけますでしょうか。なにせ,Flashについては超初心者なもんで…。よろしくお願いします。無理だったらFlash Lite 2.0でやってみようと思います。

関連するQ&A

  • actionscript 3.0 勉強中のもです。

    actionscript 3.0 勉強中の者です。以下のプログラムにてインスタンス(人の形をした)が方向キーで動くものを制作したのですが、このインスタンスにあらかじめ、シンボル内の編集にて、左右対称の画像を 同じタイムライン内に、例えば5フレームづつ内にそれぞれ配置し、ループ状態にして、プレビューした時に行進しているような様子を設定したのですが、プレビューをしてみると、キーを押す前は元気よく行進しているのですが、ボタンを押してインスタンスを動かしたとたんに行進をやめてしまいます。行進を続けさせながら、方向キーの操作を行うにはどのようにすればよろしいでしょうか?よろしくお願い致します。 var bKeyUp:Boolean = false; var bKeyDown:Boolean = false; var bKeyLeft:Boolean = false; var bKeyRight:Boolean = false; stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeydown); stage.addEventListener(KeyboardEvent.KEY_UP, onKeyup); function onKeydown(e:KeyboardEvent) { switch (e.keyCode) { case Keyboard.UP: bKeyUp = true; break; case Keyboard.DOWN: bKeyDown = true; break; case Keyboard.LEFT: bKeyLeft = true; break; case Keyboard.RIGHT: bKeyRight = true; break; default: break; } trace("UP : " + bKeyUp + "\n" + "DOWN : " + bKeyDown + "\n" + "LEFT : " + bKeyLeft + "\n" + "RIGHT: " + bKeyRight + "\n" ); } function onKeyup(e:KeyboardEvent) { switch (e.keyCode) { case Keyboard.UP: bKeyUp = false; break; case Keyboard.DOWN: bKeyDown = false; break; case Keyboard.LEFT: bKeyLeft = false; break; case Keyboard.RIGHT: bKeyRight = false; break; default: break; } trace("UP : " + bKeyUp + "\n" + "DOWN : " + bKeyDown + "\n" + "LEFT : " + bKeyLeft + "\n" + "RIGHT: " + bKeyRight + "\n" ); } const PLAYER_SPEED:uint = 4; var pSpeed:int = PLAYER_SPEED; player2.addEventListener(Event.ENTER_FRAME, playerActions); function playerActions(e:Event) { if (bKeyUp == true) { player2.y -= pSpeed; player2.gotoAndStop("up"); } if (bKeyDown == true) { player2.y += pSpee これにどのような追加をしたらよろしいでしょうか? 何卒お願い致します。

    • ベストアンサー
    • Flash
  • switch文の中でforeach

    switch文の中でforeachをしたいのですが、うまくいきません。 <現状> $x=5; switch( $x ){  case 2:   echo $x="JavaScript";    break;  case 5:   echo $x="PHP";   break;  default:   echo $x="未分類"; } <やりたいこと>判定データを別で用意して、読み込ませたい $x_master = array(  2 => "JavaScript",  5 => "PHP", ); ■テスト1 $x=5; switch( $x ){  foreach( $x_master as $key => $value ){   case $key:    echo $x=$value;   break;  }   default:    echo $x="未分類"; } これを試すと、Parse error: syntax error, unexpected T_FOREACH, expecting T_CASE or T_DEFAULT or '}'となります。これは、switchの中でforeachは使えないということでしょうか? ■テスト2 $x=5; foreach( $x_master as $key => $value ){  switch( $x ){   case $key:    echo $x=$value;    break;   default:    echo $x="未分類";  } } $x=2;だとJavaScript未分類となるのに、$x=5;だと未分類未分類になります。 $x=2と$x=5で挙動が異なる理由が分かりません。 ■テスト3 $x=5; foreach( $x_master as $key => $value ){  switch( $x ){   case $key:    echo $x=$value;   break;  } } これでようやく望んだ結果が得られたのですが、これでo.k.のなのでしょうか? なんでdefault入れてはダメなのでしょうか? foreachでいくら回しても、該当部分が存在する限り、breakして、defaultへはいかないと思うのですが…。それともforeachの一番最後の終了処理で何かが返ってきて、それが該当項目に存在せず、defaultへ流れる結果となるのでしょうか? そもそも、考え方として、foreachで回している以上、この場合、例外というか、switch文のdefaultに該当する部分は必要ないとの認識でよいでしょうか? 質問内容 ■テスト1が、syntax errorとなる理由 ■テスト2で、$x=2なら$x_masterを読み込むのに、$x=5なら$x_masterを読み込まない理由 ■テスト3のケースは、default部分を本当に書かなくてo.k.でしょうか? またその理由は?

    • ベストアンサー
    • PHP
  • C言語で電卓を作成する。

    C言語を用いて三項まで計算できる電卓を作りたいのですが、どうも上手くいきません。 四則演算(+、-、×、÷)の優先順位を用いたプログラミング方法が分かりません。 以下に自分で作成したソースを添付します。 このソースに修正や追加して3項までの四則演算できるプログラミングを教えていただけますか? 宜しくお願いします。 #include <stdio.h> int main(void) { int answer; /*答え*/ int x,y,z; /*x=第一項,y=第二項,第三項*/ char op1,op2; /*演算子1、演算子2*/ while(1){ printf("式を入力してください\n"); printf("式:"); scanf("%d %c %d %c %d" ,&x,&op1,&y,&op2,&z); if((op1=='+'|'-'|'*'|'/') && (op2=='+'|'-'|'*'|'/')){ switch(op2){ case '+': answer=y+z; break; case '-': answer=y-z; break; case '*': answer=y*z; break; case '/': if(z==0){ printf("ERROR\n"); return 0; } answer=y/z; break; default: printf("ERROR\n"); return 0; } switch(op1){ case '+': answer=x+answer; break; case '-': answer=x-answer; break; case '*': answer=x*answer; break; case '/': if(y==0){ printf("ERROR\n"); return 0; } answer=x/answer; break; default: printf("ERROR\n"); return 0; } printf("答え:%d\n",answer); } else { switch(op1){ case '+': answer=x+y; break; case '-': answer=x-y; break; case '*': answer=x*y; break; case '/': if(y==0){ printf("ERROR\n"); return 0; } answer=x/y; break; default: printf("ERROR\n"); return 0; } printf("答え:%d\n",answer); } } } 左辺に×、÷が来ても優先的に計算されません。

  • PIC18F15Q40のI2Cスレーブ動作について

    現在、PIC18F15Q40をMicrochip MPLAB X v5.50とMCC v5.0.3で開発しています。 MCCの自動生成コードによってI2Cスレーブ動作(割り込み駆動)をさせ、 マスタからREAD要求 -> 固定長データを送り返すというようなプログラムを書きたいのですが、 データを送信し終わった後に割り込み処理から復帰せず、WDTによるリセットが掛かってしまいます。 以下、割り込み関数内の処理です。単純にデータカウンタをインクリメントし、それに応じたデータをI2C1_Writeしているだけになります。 void I2C_WriteInterrupt(void) { volatile static uint8_t tx_buf; switch(I2C_TxCounter) { case REV: tx_buf = Revision; break; case STAT: tx_buf = Status; break; case VOL_MSB: tx_buf = (uint8_t)((ADC_Result >> 8) & 0x00FF); break; case VOL_LSB: tx_buf = (uint8_t)(ADC_Result & 0x00FF); break; case CYL_MSB: tx_buf = (uint8_t)((CycleCount >> 8) & 0x00FF); break; case CYL_LSB: tx_buf = (uint8_t)(CycleCount & 0x00FF); break; default: tx_buf = 0xFF; } I2C1_Write(tx_buf); // カウンタ操作とタイマ再開 if(I2C_TxCounter < CYL_LSB) I2C_TxCounter++; } 以前PIC16F18877で同様の処理を行わせた際には特に問題は発生しなかったのですが…… MCCの設定はスレーブアドレスとクロックストレッチ有効、Interrupt Driven有効以外に変更していません。 どなたか解決策お持ちの方はいらっしゃいますでしょうか。

  • 色描画

    以下は、ウインドウプロシージャ内でのプログラムです。 RGB( )ですが、0xFFは、255の事ですよね? x*0xFF/rect.rightこの計算式は、何を求めているんですか? 教えてください。 HDC         hdc; PAINTSTRUCT  ps; COLORREF    color; LONG        x,y; RECT        rect; switch(umsg){   case  WM_PAINT:       hdc =BeginPaint(hwnd,&ps);       GetClientRect(hwnd,&rect);       for(y=0;y<rect.bottom;y++){          for(x=0;x<rect.right;x++){            color=RGB(x*0xFF/rect.right,0,0);            SetPixel(hdc,x,y,color);          }       }

  • c言語 DFAのプログラム

    DFAを受理するプログラムを組んでいるのですが、コンパイルして動作させるとすぐに終わってしまいます。 どこがいけないのでしょうか…。助言を求めています。 手探りでやっているのですが、ファイル読み込みなど、基本的な所からわかっていない状態です。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <getopt.h> enum { NFA_0_2_3_5, NFA_0_1_2_3_5_6_7_8_10_11_12, NFA_4_7_8_10, NFA_11_12, NFA_9_12, NFA_13_15_16, NFA_14 }; int regex(char *txt, int idx); int DFA_match(char *txt, int startIndex); int main (int argc, char *argv[]) { int c, i, m, idx; char text[1024], *pattern; FILE *fp; pattern = argv[optind++]; for (i = optind; i < argc; i++) { fp = fopen(argv[i], "r"); if (fp == NULL) { fprintf(stderr, "File %s: open failed.\n", argv[i]); } else { while (fgets(text, sizeof(text), fp) != NULL) { m = 0; for (idx = 0; (idx = regex(text, idx)) >= 0; idx++) { m++; } if (m > 0) { printf("%s: %s", argv[i], text); } } } } return 0; } int DFA_match(char *txt, int startIndex) { int DFAstate = NFA_0_2_3_5; int acceptLen = -1; int i; for (i = startIndex; txt[i] != '\0'; i++) { switch (DFAstate) { case NFA_0_2_3_5: switch(txt[i]){ case 'x': DFAstate = NFA_0_1_2_3_5_6_7_8_10_11_12; break; case 'z': DFAstate = NFA_4_7_8_10; break; default: return acceptLen; } break; case NFA_0_1_2_3_5_6_7_8_10_11_12: switch(txt[i]){ case 'x': DFAstate = NFA_0_1_2_3_5_6_7_8_10_11_12; break; case 'z': DFAstate = NFA_4_7_8_10; break; case 'y': DFAstate = NFA_9_12; break; default: return acceptLen; } break; case NFA_4_7_8_10: switch(txt[i]){ case 'x': DFAstate = NFA_11_12; break; case 'y': DFAstate = NFA_9_12; break; default: return acceptLen; } break; case NFA_11_12: switch(txt[i]){ case 'y': DFAstate = NFA_9_12; break; default: return acceptLen; } break; case NFA_9_12: switch(txt[i]){ case 'y': DFAstate = NFA_13_15_16; acceptLen = i; break; default: return acceptLen; } break; case NFA_13_15_16: switch(txt[i]){ case 'x': DFAstate = NFA_14; break; default: return acceptLen; } break; case NFA_14: switch(txt[i]){ case 'y': DFAstate = NFA_13_15_16; acceptLen = i; break; default: return acceptLen; } break; } } return acceptLen; } int regex(char *txt, int idx) { int i; for (; idx < strlen(txt); idx++) { if ( (i = DFA_match(txt, idx)) > 0) { printf("matched!\n"); return idx; } } return -1; }

  • C言語の例文

    お世話になります。 C言語を勉強しています。 以下の判定式を、短い行数のプログラムで表す例文を教えてください。 よろしくおねがいします。 int e; byte Move_data; switch(Move_data){ case 0xF0: e= 3; break; case 0xE0: e= 2; break; case 0xD0: e= 2; break; case 0xC0: e= 1; break; case 0xB0: e= 1; break; case 0xA0: e= 1; break; case 0x90: e= 0; break; case 0x80: e= 0; break; case 0x70: e= 0; break; case 0x60: e= -1; break; case 0x50: e= -1; break; case 0x40: e= -1; break; case 0x30: e= -2; break; case 0x20: e= -2; break; case 0x10: e= -3; break; }

  • switch文の中に、throws new Exception();を書くとコンパイルエラーになる

    以下のようなswitch文で、 default:内の、throws new Exception(); の処理部分で 「式の開始部分が不正です」というコンパイルエラーになってしまいます。 書き方が間違っているのでしょうか? default:の場合に、throws new Exception(); の処理を行いたいのですが どのように書けば、エラーにならないのか教えて下さい。 -------------------------------- switch (number) { case 0: //処理 break; case 1: //処理 break; default: throws new Exception(); } --------------------------------

    • ベストアンサー
    • Java
  • 移動を順に表示したい

    お世話になります。 actionscript 3.0 で作成しております。 A_positiveというmcを1秒ごとに line_0のxの位置、line_1のxの位置,line_2のxの位置 と順に表示したいのですが、いきなりline_2のxの位置が 出てしまいます。 timerイベントなど、色々試したのですが、具体的に 下記のソースをどのようにソースを変えればいいのか わからないので、お手数ですが教えて頂ければと思います。 何卒よろしくお願い致します。 ///////////////////////// function Click_start(evt)※クリックしたらスタート { var x=2; for (atai = 0; atai<x; atai++ ) { A_positive.x=Change_line(atai).x; } } function Change_line(line) { var Return; switch(line){ case 0:     Return=line_0;     break;   case 1:     Return=line_1;     break; case 2:     Return=line_2;     break; } return Return; } ///////////////////////////

    • ベストアンサー
    • Flash
  • HKSツインパワーの配線・・・

    某Auctionで購入したHKSの旧型TWINPOWER (シルバーボディー、中央に赤の配色)の 配線、コレの結線方法が分からなくて困っ ています。 本体からは下記の様に配線が出ています。 ・赤X2 ・橙X2 ・黄X1 ・緑X1 ・黒X2 以上8本、ソノ先に在るカプラー以降は下記 の通りです。 ・赤X1 ・橙X1 ・緑X1 ・白X1 (Uターンしている青X1、黒X1は本体直) 以上、実際に結線されるのは本体から伸びる 黒、赤、橙、緑、白の5本の様で、黒はアース だろうと言う以外はまったく不明です。 ご存知の方、いらっしゃいましたら宜しく お願いします。

専門家に質問してみよう