• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:計算式を文字入力で変更して答えを出すスクリプト)

JavaScriptを使用した計算スクリプトの改良方法について

このQ&Aのポイント
  • JavaScriptを使用して作成された計算スクリプトを改良する方法について教えてください。
  • フラッシュ6以下で作成された計算スクリプトを改良して、文字入力で変更可能な計算結果を得たいと考えています。
  • 具体的には、ボタンひとつと文字入力のテキスト欄を組み合わせて、特定の文字入力に対して特定の計算式を実行するようにしたいと思っています。

質問者が選んだベストアンサー

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

回答の前に ...。 変な部分がたくさんありますよ。 まず1つめですが。 新規ドキュメントを作成し, 次のスクリプトをフレーム1に書いて, 「制御」→「ムービープレビュー」してみてください。 x1 = 0; X1 = 1; trace(x1); // →出力 1 trace(X1); // →出力 1 上のように書くと x1 も X1 も 1 になるはずです。 大文字小文字の区別ができたのはFlashPlayer7(Flash MX 2004)からで, FlashPlayer6(Flash MX)では大文字小文字の区別はなく同じものとして扱われます。 ですから例えば, Ans=Number(ans); は ans=Number(ans); と同じ意味になります。 他も同様です。 あと, この大文字小文字とは別問題で, > このボタンを1個にして Siki=String(siki); > のような文字入力のテキスト欄をもう一つ作って これの意味(日本語)が全く理解できません。 Siki=String(siki);のようなテキストフィールドにAと入力??? やっぱり意味がわかりません。 ですからこの Siki=String(siki); の部分は無視させていただきます。 それと, > フレーム1に > X1=Number(x1); > X2=Number(x2); > Ans=Number(ans); これはフレーム1に入った時に1回だけ動作します。 それ以前に 変数 x1 などに何かの値が入っていれば動作します。 つまり この3行の前に x1,x2,ans に何かの値を代入するスクリプトが存在するか, 変数名の付いたテキストフィールド があるか, FlashVars などで他から変数とその値を受け取ったか, などということが起きていることになります。 そこはよろしいでしょうか? ================== そういうわけで, 私が勝手に私が理解したように質問内容を変更します。 ~~~私が変更した質問~~~~~~~ FlashPlayer6 用の SWF をパブリッシュするという設定で, 以下のような計算式を作りました。 フレーム1に次のように書いています。 x1 = "5"; x2 = "3"; ans = "15"; //(←存在理由不明) x1=Number(x1); x2=Number(x2); ans=Number(ans); //(←存在理由不明) function keisan1() {ans=Math.round(x1*x2);} function keisan2() {ans=Math.round(x1*x1*x2);} function keisan3() {ans=Math.round(x1*x1*x2*x2);} そして, テキスト入力のテキストフィールド と ボタン を1つずつ作成し, テキストフィールドに A と入力して ボタン を押すと,  keisan1() が実行され, テキストフィールドに B と入力して ボタン を押すと,  keisan2() が実行され, テキストフィールドに C と入力して ボタン を押すと,  keisan3() が実行されるようにするには, ボタンにどのようなスクリプトを書けば良いのでしょうか? ~~~~~~~~~~~~~~~~~~ 以下,私が勝手に変更した質問に関して回答します。 まずテキスト入力のテキストフィールドですが, これには "インスタンス名" を付けます。 "変数名" ではありません,"インスタンス名" です。 この件についての参考URL 「テキストフィールドのインスタンス名と変数名について」 http://livedocs.adobe.com/flash/9.0_jp/main/00000881.html  ~引用~ > 変数名をダイナミックテキストフィールドや > テキスト入力フィールドに割り当てることができます。 > これによって、変数に値を割り当てることができます。 > これは、旧バージョンの Flash Player > (Flash Player 4 など) 用のアプリケーションを > 作成するときに使用する可能性のある非推奨の機能です。                       ~~~~~~~~~~~~~~~~~~ この説明では,テキスト入力のテキストフィールドに, 「siki_txt」 というインスタンス名を付けたとしておきます。 その場合,ボタンには次のように書けば良いと思います。 ---------------------------------- on (release) { if (_root.siki_txt.text == "A") { keisan1(); } else if (_root.siki_txt.text == "B") { keisan2(); } else if (_root.siki_txt.text == "C") { keisan3(); } } ---------------------------------- 上のスクリプトの, _root.siki_txt.text == "A" についてですが, これの厳密な意味を書くと, 「_root にある siki_txt というインスタンスの text プロパティが A の値と等しいかどうか」 という意味になります。 同様に,テキストフィールド(インスタンス名「○○」)に何かのテキストを表示させるときは, ○○.text = "あいうえお"; ように書きます。 つまり, 参照する場合も代入する場合も,普通はテキストフィールドの text プロパティを使用します。 長くなりましたが,以上をまとめると,  1 FlashPlayer6 以下用 SWF には    スクリプト上の大文字小文字の区別がない  2 FlashPlayer6 以上用 SWF の    テキストフィールドにはインスタンス名を付けて    .text でアクセスする  3 条件分岐には if文 を使う となります。 if文 についての参考URL 「FLASHアクションスクリプト入門編 if / if else文」 http://isvalid.jp/actionscriptLab/ASlesson/actionsctipt_if.html ================== しかし実際のご質問は, > フラッシュ6以下で以下のような計算(式は略)を作りました。 フラッシュ6 "以下" ですね。 すごく微妙だと思います。 FlashPlayer5 にも対応させる場合は, テキストフィールド の インスタンス名 を取って 変数名 を付けてください。 ただし, 大文字小文字が区別されない点は FlashPlayer6 と同じです。 FlashPlayer4 では, function文 が使用できませんからこのままでは対応不可能です。 他の文で置きかえれば可能です。 FlashPlayer3 以下には 変数というもの(概念)が存在しませんし ダイナミックテキストフィールドもテキスト入力テキストフィールドも存在しませんから, おそらく他の文に置きかえても不可能ではないかと思います。 「計算尺」のようなもの,または「そろばん」のようなものを, ムービークリップ(Flash3で登場)を駆使して作成すれば, 機能的には同じようなものが作成可能かもしれませんが...。 これに限らず, バージョン○○ 以上 に対応というのは考えやすいですが, バージョン○○ 以下 に対応というのは考えにくい(考えるのが不可能に近い)です。 上限バージョンを決めてもらうより, バージョン○○で使用するという普通の条件か, バージョン○○にも対応させるという最低条件を提示してもらわなければ, ちゃんとした回答はできません。  

chikomaru
質問者

お礼

ご回答ありがとう御座います。 私がやりたかった事は見事にこの事です。質問の式も見よう見まねでWEB等のサンプルをいじってやっと動いた物です。いろいろおかしい所を最初から教えて頂き本当に勉強になります。今教えて頂いたとうりにやってみて上手く動きました。もっともっと勉強しなくてはいけませんね。大変ご丁寧にご教授いただき本当にありがとう御座いました。また何かありましたらどうぞ宜しくお願い致します。

関連するQ&A