- 締切済み
Flash ドラッグ&ドロップで買い物かごの合計を出したいのです。
Flashをそんなに使いこなせないほどのレベルの者です。 今回知人から小さい子向けの買い物かごシミュレーション的なものを依頼されました。 どんなものかといいますと、画面上には買い物カゴと商品棚があって、棚にはバナナやリンゴ等の果実(商品)が並んでいます。 商品棚から買い物カゴへ好きな果実を数個ドラッグ&ドロップします。 最後に「レジ」のボタンを押すと別ページに飛んで、買い物カゴの中身の合計金額が表示されるようなものです。 ただ計算機と違って、ドラッグ&ドロップ要素をプラスされていて なおかつ買い物カゴの中身だけを合計するといった内容に四苦八苦しております。 どなたかアドバイスや参考になるURLをお教えいただけないでしょうか。 依頼自体金銭が絡むような仕事ではないので、できればFLASHのサンプルをいじるだけでサクーっと作れればいいかなとも思っております。 (このような内容のFLASHサンプルをUPしている所を知っているならばお教え頂きたい) それでは宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
お持ちのFlashのバージョンもActionScriptのバージョンも書かれていらっしゃらないため, 少々回答がしにくいですね。 Flash MX 以上(Flash MX,MX2004系,8系,CS3,CS4)をお持ちだと勝手に決めて以下を回答します。 ActionScript のバージョンは 1.0 です。 ステージ上に 「ringo_mc」,「banana_mc」,「budou_mc」というインスタンス名を付けたドラッグ用ムービークリップと 「kago_mc」というインスタンス名を付けたカゴ用ムービークリップと 「goukei_btn」というインスタンス名を付けた合計表示動作用ボタンと 「goutei_txt」というインスタンス名を付けた合計表示用ダイナミックテキストを用意します。 (各インスタンスに関しては下の図↓をご参考に。) そして, それらを配置した _root などのタイムラインの フレーム(キーフレーム)に 次のように書けば 一応それなりに近い物ができると思います。 ================================================= // 変数「goukei(合計)」の初期化 goukei = 0; // // ---リンゴムービークリップに関して--------- // リンゴムービークリップにドロップフラグである変数を設定 ringo_mc.drop_flg = false; // リンゴムービークリップを押した時の動作定義 // ringo_mc.onPress = function() { // リンゴムービークリップをドラッグ開始 this.startDrag(); }; // // リンゴムービークリップを放した時の動作定義 ringo_mc.onRelease = ringo_mc.onReleaseOutside=function () { this.stopDrag(); // もしカゴムービークリップに当たっていてdrop_flgがfalseであれば if (this.hitTest(kago_mc) && !this.drop_flg) { // 合計に100を加算 goukei += 100; // drop_flg を true にする this.drop_flg = true; // もしカゴムービークリップに当たっていなくてdrop_flgがtrueであれば } else if (!this.hitTest(kago_mc) && this.drop_flg) { // 合計から100を減算 goukei -= 100; // drop_flg を false にする this.drop_flg = false; } }; // // ---バナナムービークリップに関して--------- banana_mc.drop_flg = false; // banana_mc.onPress = function() { this.startDrag(); }; // banana_mc.onRelease = banana_mc.onReleaseOutside=function () { this.stopDrag(); if (this.hitTest(kago_mc) && !this.drop_flg) { // 合計に200を加算 goukei += 200; this.drop_flg = true; } else if (!this.hitTest(kago_mc) && this.drop_flg) { // 合計から200を減算 goukei -= 200; this.drop_flg = false; } }; // // ---ブドウムービークリップに関して--------- budou_mc.drop_flg = false; // budou_mc.onPress = function() { this.startDrag(); }; // budou_mc.onRelease = budou_mc.onReleaseOutside=function () { this.stopDrag(); if (this.hitTest(kago_mc) && !this.drop_flg) { // 合計に300を加算 goukei += 300; this.drop_flg = true; } else if (!this.hitTest(kago_mc) && this.drop_flg) { // 合計から300を減算 goukei -= 300; this.drop_flg = false; } }; // // ---合計ボタンに関して--------- // 合計ボタンをクリックした時の動作定義 goukei_btn.onRelease = function() { // 「goutei_txt」に合計を表示 goukei_txt.text = goukei; }; ================================================= 本当は「金額データ用配列」などを別に用意して, インスタンス名なども機械的に整列させた名前を付ければ, プログラム的にはもっともっとスマートになります。 しかしそういうテクニックを使うと, 色々な概念や関数の使い方などにも話が及んで本体が見えにくくなると思いましたので, 1つ1つのムービークリップに対して着実に1つ1つの動作と金額を設定するようなスクリプトにしました。 スクリプトは長いですが, これだと,ミカンが増えた時はどうすれば良いか とか ブドウをイチゴに変えたい場合はどうすれば良いのかなどが分かりやすいと思います。 Flashゲーム講座&ASサンプル集【当たり判定について】 http://hakuhin.hp.infoseek.co.jp/main/as/hittest.html
お礼
BlurFiltanさん 解り易い回答ありがとうございます。画像も付けて頂いてありがたいです。 早速このFLASHにチャレンジしてみますので、報告までしばらくお待ち下さい。 参考URLも見て勉強します。