- ベストアンサー
アクションスクリプトで、足し算、引き算をするには?
FLASHのアクションスクリプトでテキストエリアに打ち込んだ数字を足し算、引き算させるには、どう記述すればよいのでしょうか? その際、数字のみしか、打ち込めないようにすることは可能ですか? 参考になるサイト等ありましたら、教えていただけないでしょうか? よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
「テキストエリア」というのは, 「TextAreaコンポーネント」のことではなく,テキストフィールドのことではないでしょうか? 「テキストエリア」ではなく,「テキストフィールド」 ということと勝手に解釈して回答します。 まず, テキストツール(「A」マークのボタン)で, ステージ上に3つのテキストフィールドを作成します。 このとき, 3つのうち2つは,数値を入力するための「テキスト入力」のテキストフィールド, 残りの1つは計算結果を表示するための「ダイナミックテキスト」として用意します。 数値を入力するための2つのテキストフィールドにはそれぞれ, 「a」 というインスタンス名と,「b」というインスタンス名を付けておいたとしておきます。 そして, 計算結果を表示するためのテキストフィールドには, 「c」というインスタンス名を付けておいたとします。 「a」 と「b」に入力された数字とを足し算して「c」に出力したい場合, ボタンをクリックして計算を実行させるとするなら, ステージ上にボタンを(ボタンシンボルのインスタンス)を作成して, そのボタンに次のように書きます。 ---------------------------------------- on (release) { c.text = Number(a.text)+Number(b.text); } ---------------------------------------- テキストフィールドに入力された物は, 通常 "文字列" として扱われますから, 「a」と「b」に入力された文字を, Number関数で文字列を数値に変換し,足し算しています。 > 数字のみしか、打ち込めないようにすることは可能ですか? これには, テキストフィールドクラスの restrictプロパティを使います。 「a」,「b」,「c」が存在するフレームに次のように書けば, テキストフィールドに 0~9 までしか入力できないような制限がかかります。 ------------------------------------ a.restrict = "0-9"; b.restrict = "0-9"; ------------------------------------ Flashドキュメンテーション (Flash 8 のヘルプ) より restrict (TextField.restrict プロパティ) http://livedocs.macromedia.com/flash/8_jp/main/00002771.html
その他の回答 (2)
#1&2です。 > ちなみに、a・bのテキストをカンマ表記にすることは可能なのでしょうか? できますよ。 できますけど,#2では, > 計算結果をさらに次の計算に使うような場合は, > ややこしくなるだけなので,カンマを入れるのはやめた方が良いです。 と書いたでしょう。 わざわざややこしい方&難しい方に突き進んでいませんか? 最初は C=A+B (AとBを足した値をCに代入) というような単純な加算の話だったわけで, そういう内容とはぜんぜん違う方向に走り出していると思いますし, カンマを付ける付けないという問題は, 単なる装飾の問題で,本来の計算とは別次元の話だと思うのですが...。 一応#2の最後のスクリプトを書き直すと次のようになります。 //////////////////////////////////////////////////////////// a.restrict = "0-9"; b.restrict = "0-9"; //------ function setComma(mystr) { if (mystr.length>3) { mystr = arguments.callee(mystr.substr(0, -3))+","+mystr.substr(-3); } return mystr; } //------ // キー監視用のインスタンスオブジェクトを作成 myKey = new Object(); // キーを押したときの動作定義 myKey.onKeyUp = function() { // 「a」が空白でなければ if (a.text != "") { // 「a」をカンマで分けて空白で結合 a.text = a.text.split(",").join(""); } // 「b」が空白でなければ if (b.text != "") { // 「b」をカンマで分けて空白で結合 b.text = b.text.split(",").join(""); } // 「a」も「b」も空白でなければ if (a.text != "" && b.text != "") { c.text = setComma(String(parseInt(a.text, 10)+parseInt(b.text, 10))); } // 「a」が空白でなければ if (a.text != "") { a.text = setComma(String(parseInt(a.text, 10))); } // 「b」が空白でなければ if (b.text != "") { b.text = setComma(String(parseInt(b.text, 10))); } // フォーカスの当たったテキストフィールドのフォーカス移動 myforcus = Selection.getFocus(); Selection.setSelection(eval(myforcus).text.length, eval(myforcus).text.length); }; // キー監視用のインスタンスをキークラスのリスナーに登録 Key.addListener(myKey); //////////////////////////////////////////////////////////// これが, C=A+B の発展系にはぜんぜん思えませんのですが。
お礼
ご回答ありがとうございます。 そうですね。当初抱いた疑問とずれてしまいました。 ただ、とても参考になったことは確かです。 本当に感謝いたします。
#1です。 > 頭が0からはじまると、計算結果が正しく表示されないようです。 > どうすればよいかご存知でしょうか? 0x で始まる数値は 16 進数として解釈されます。 また 0 で始まる数値 8 進数として解釈されます。 したがって,8進数に解釈されないように pareseInt関数 を使います。 ここまでで#1で書いたボタンのスクリプトは次のようになります。 --------------------------------------------- on (release) { c.text = parseInt(a.text, 10)+parseInt(b.text, 10); } --------------------------------------------- 「0で始まる数値が0に変わってしまう」 http://www.fumiononaka.com/TechNotes/Flash/FN0109004.html ////////////////////////////////////////////////////////////// > ・数字を「1,500,000」のような通貨表示させることは可能でしょうか? そういう,PHP の number_format のようなものは AcrionScriptには元からないので,自分でそう表示するように考えなければなりません。 でも, 良い参考 URL がありました。 Macromedia MAX 2004 Japan ActionScript 2.0とは入門編 http://www.fumiononaka.com/Sample/MAX2004/ActionScript2Basic.html ここまでで, #1の書いたスクリプトは次のようになります。 フレームのスクリプト -------------------------------------------- a.restrict = "0-9"; b.restrict = "0-9"; function setComma(mystr) { if (mystr.length>3) { mystr = arguments.callee(mystr.substr(0, -3))+","+mystr.substr(-3); } return mystr; } -------------------------------------------- ボタンのスクリプト -------------------------------------------- on (release) { c.text = setComma(String(parseInt(a.text, 10)+parseInt(b.text, 10))); } -------------------------------------------- ※カンマが入った文字列は,単なる数値の文字列ではないので, Number関数やparseInt関数だけでは元の数値に戻りませんよ。 計算結果をさらに次の計算に使うような場合は, ややこしくなるだけなので,カンマを入れるのはやめた方が良いです。 ////////////////////////////////////////////////////////////// > ・ボタンではなく、数字を打ち込むたびに > 計算結果を表示させることは可能でしょうか? これが最難関...。 というか,やること自体は難関でも何でもなく簡単なのですが, 「ボタンを使用しなければ,足し算と引き算をどうやって区別するの?」 という疑問が湧いてきます。 でも,そういうことをどうするのかは,考えていただくとして, 数字を打ち込むたびに計算結果を表示させることについて純粋に回答します。 数字を打ち込むたびに計算結果を表示させるということは, 何かキーを押すたびに 「on (release) { }」 の { } 内を実行させればいいということになります。 #1で作成したボタンは消してください。 そして,フレームに次のように書けば,補足で書かれているようなことができます。 ------------------------------------------- a.restrict = "0-9"; b.restrict = "0-9"; //------ function setComma(mystr) { if (mystr.length>3) { mystr = arguments.callee(mystr.substr(0, -3))+","+mystr.substr(-3); } return mystr; } //------ // キー監視用のインスタンスオブジェクトを作成 myKey = new Object(); // キーを押したときの動作定義 myKey.onKeyUp = function() { // 「a」も「b」も空白でなければ if (a.text != "" && b.text != "") { c.text = setComma(String(parseInt(a.text, 10)+parseInt(b.text, 10))); } }; // キー監視用のインスタンスをキークラスのリスナーに登録 Key.addListener(myKey); ------------------------------------------- Flashドキュメンテーション onKeyUp (Key.onKeyUp イベントリスナー) http://livedocs.adobe.com/flash/8_jp/main/00002314.html
補足
ありがとうございます。 解決できました!! ちなみに、a・bのテキストをカンマ表記にすることは可能なのでしょうか?
補足
早速やってみたところ、うまくできました。 ありがとうございます! ただ、頭が0からはじまると、計算結果が正しく表示されないようです。 どうすればよいかご存知でしょうか? もう2点。 ・数字を「1,500,000」のような通貨表示させることは可能でしょうか? ・ボタンではなく、数字を打ち込むたびに計算結果を表示させることは可能でしょうか? ご存知でしたら教えていただけないでしょうか。 よろしくお願いいたします。