ActionScript初心者のためのムービークリップ制御についての質問

このQ&Aのポイント
  • ActionScript初心者の方がムービークリップをボタンシンボルのように使用する手法について質問しています。
  • 質問文章では、ムービークリップを制御するために変数を作成し、初期値として「false」を格納する方法についての理解が進まないとのことです。
  • 質問者はアクションスクリプトの初心者であり、プログラミング経験も限られているため、この部分の理解を求めています。
回答を見る
  • ベストアンサー

ActionScriptのご助言よろしくお願いします。

アクションスクリプト初心者です。 今までプログラミングなどは行った事が無く、せいぜいExcel関数を使用する程度のものです。現在書籍を下にアクションスクリプトを勉強しています。 それで書籍の中に、ムービークリップをボタンシンボルの様に使用する手法について書かれているのですが、途中から理解が進まない状態なので質問書き込みさせていただきました。 書籍には 「 ムービークリップ-みかんちゃんの制御  前述のフローチャートに沿ってアクションを完成させます。  変数を作成し、初期値として「false」を格納します。 onClipEvent (load){ this.stop(); flg = false; } 次にマウスをクリック(アップ)した時に変数をtrueにします。 on (release){ flg = true; _parent.play(); } 最後にif文を使ってロールアウト時に実行する処理を分岐します。 on (releaseOutside,rollout) { if(flg) { this.play(); } else ( this.gotoAndStop(1); } } 以上で完成です。  複雑になりましたが、一応メインのムービーも動き、自分自身もマウスのアクションによって動作するように記述する事ができました。  *本来 else以下の部分は省略可能です。                    」と書かれています。 それで、まず分からないのが「変数を作成し、初期値として「false」を格納します。」という記述のところで、flg = false; とは何を書いているのかが分からないという状態です。 この部分、どの様に理解すればよいのかご教授やご助言をいただきたく思います。 よろしくお願いします。

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

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

  • ベストアンサー
回答No.1

flgというのはフラッグ=旗の事です。これは変数名なのでなんでもかまいませんが、プログラムではよく使う変数名です。 falseは×(誤)、trueは○(正)の旗になります。 flgは×か○のどちらかの値をとることになるわけですが、初期値としては×(false)としておく、と言う話です。 そのflgが、 if(flg) {  this.play(); } else (  this.gotoAndStop(1); } と言う所で条件分けされています。ifは英語でいうところの、もし~ならば、です。同じくelseは さもなければ、です。 if()は()内がtrueの場合は最初の{}内が処理され、falseの場合はelse以降の{}内の処理が行なわれる決まりになっています。 上記のスクリプトを日本語的に訳すと、 もしflg(旗)がtrue(正、○)ならば、 this.play()(再生)して、 さもなければthis.gotoAndStop(1)(フレーム1に行って止まれ)、 と言い換える事が出来ます。 初期値はfalseですから、最初にロードした時にムービーはフレーム1で止まっています。マウスアップでtrueになりますから、ムービーは動き出します。 このように理解していってください。 プログラムは、機械の言葉のようですが、もともとは英語から作られており、英単語としてみれば解釈がしやすく、覚えるのもはやいです。

goo2408
質問者

お礼

taketan_mydns_jpさん、ご回答ありがとうございます。 数時間何度も読み返したり、Flashをいじってみたりしてようやく理解出来ました(たぶん)。 onClipEvent (load){ this.stop(); flg = false; } と記述する事で、onClipEvent (load)の状態では、if(flg)のflgにはfalseが返され、if(false)という状態になっていて、同じくon (release)、、、、ではtrueが返されて、if(true)となっていて、でそれによって、 on (releaseOutside,rollout) { で if(true) またはif(false) の指定スクリプトが実行されるという様なイメージでだいたいよいのでしょうか。

関連するQ&A

  • ActionScript 2.0 再生・停止

    クリックで特定のムービークリップが再生・停止するスクリプトをAS2.0(ActionScript 2.0)で記述したいです。 現在はAS1.0で下記のようにムービークリップに記述しています。 これをAS2.0に直すとどのような記述になるでしょうか。宜しくお願いいたします。 onClipEvent (load) { mode = true; } on (release) { mode = !(mode); if (mode) { this.play(); } else { this.stop(); } }

    • ベストアンサー
    • Flash
  • ドラックすると移動し、クリックすると地名インスタンスが複数選択される地図作成

    Flashで地図を作成しています。 大きめの地図なのでマスクをかけ、ドラックすると地図が移動され、非表示になっている箇所も表示できるように作成しました。 この地図に対して、更に各地名インスタンスを複数選択でき、選択された地名を地図横にテキストとして羅列させる仕組みを作りたいと思います。 移動する時の動作として、配置している全体地図をmap_mcとし、そのムービークリップに対して下記のようにスクリプトを記述しました。 onClipEvent (load) { press_flg = false; drag_flg = false; } //マウスのボタンが押されたら onClipEvent(mouseDown) { press_flg = true; } //マウスポインタが動かされたら onClipEvent(mouseMove) { if(press_flg && (!drag_flg)) { hidari = Stage.width-this._width/1.22; ue = Stage.height-this._height/1.2; migi = this._width/3.6; sita = this._height/3.3; this.startDrag(false, hidari, ue, migi, sita); drag_flg = true; } } //マウスボタンが押されて離されたら onClipEvent(mouseUp) { if(drag_flg) { this.stopDrag(); } else { ※空欄; } press_flg = false; drag_flg = false; } //マウスボタンが押され、範囲外で離されたら on(release, dragOut) { this.stopDrag(); press_flg = false; drag_flg = false; } 今は動作確認のため、「※空欄」箇所にgetURLなどの記述をしていますが、ここにどのようなスクリプトを記述すれば希望の動作をするのかわからず、ネットで検索しても参考になるものを見つけられずにいます。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • actionscript2.0から3.0へ、

    actionscript2.0から3.0へ、 actionscript2.0から3.0へ、 大変申し訳ございませんが、 どなたか書き換えていただけないでしょうか? 情報が足りない場合ご指摘くださいましたら 追記いたします。 flash8にて制作されたFlaをCS4にて修正しています。 3.0がわかるものが出来なくなってしまったので、 こちらに書かせていただきました。 400フレームのものなのですが、1フレームに下記のスクリプトがあります。 btnSkip.onRelease = function() { this._visible = false; gotoAndStop("end"); btnRepeat._visible = true; } 400フレーム目には下記のスクリプトがあります。 stop(); btnRepeat._visible = true; btnSkip._visible = false; btnRepeat.onRelease = function() { gotoAndPlay("start"); this._visible = false; btnSkip._visible = true; } みたところステージには、スキップとリピートのムービークリップがあります。 スキップをクリックすると、400フレーム目に飛んでストップ、リピートを押すと1フレーム目に戻って再生、という動作です。 修正前(2.0)は正常に動作していました。 これを3.0に書き換えていただきたいのです。 大変恐縮なのですが、大至急直さないといけないのです。。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ムービークリップの領域をシェイプの形状にしたい

    よろしくお願い致します。 ムービークリップにマウスオーバーするとムービークリップが再生し、マウスアウトすると逆再生するというものを作っています。 ここで、ムービークリップのマウスオーバーする領域を矩形ではなく、見たままの形(シェイプの形状)だけに指定するにはどうすれば良いでしょうか? 現在の状況は、マウスオーバーさせるムービークリップに onClipEvent (load) { this.stop(); } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse, _root._ymouse, false)) { this.nextFrame(); } else { this.prevFrame(); } } のアクションを書いています。 自分なりに調べたところ、「shapeFlag?というものを使うらしい?」というのは分かったのですが、どう使えば良いのかさっぱり分かりません・・ どなたかご指導頂けないでしょうか。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Flash
  • actionscript 2.0 配列型変数をグローバル変数として扱いたい。

    action script2.0で ある変数を、共有しようと、ムービークリップに _global.hoge = _name(ムービーのインスタンス名); というような記述をしました。 すると、たしかにほかのどのムービークリップでも hogeという値は取り出すことができました。 ところが、インスタンスはひとつではなく複数あるため、 _global.hoge = _nameが記述されているムービークリップがいくつもあると、 次々上書きされ、結局hogeは、最後に読み込んだ _nameの値が入ってしまうという現象が起きたのです。 そこで _global.hoge[_name] = _name; というような、変数名がかぶらぬよう配列に変更してみました。 ところが、また問題が発生しました。 なぜか、配列だと頭に_globalとついていても グローバル変数として扱ってくれず、 ほかの場所で hoge[1] 等と記述しても全く値が取り出せないのです。 また、同ムービークリップ内ではちゃんと取り出せました。 どうすれば、配列変数をグローバル変数として 扱うことができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • flashのBGMのoff/onボタン

    はじめまして。Flashがまだよくわかっていない初心者です。マニュアル本、こちらのhttp://oshiete1.goo.ne.jp/qa1789705.htmlを参考にやってみましたが、わかりません。お願いです。教えてください。 最初に開いたらBGMがデフォルトで鳴っていて、「サウンドOFF」ボタンを押すとBGMは停止し、アニメーションは最後までという内容です。 現在の状況および作成手順ですが、 「シーン1」には2つレイヤーがあり、1つ目のレイヤーは「but」とし、これにはサウンドOFF/ONのムービークリップを配置してあります。フレームは1つだけで、ここに下記を記述(action)しました。 ---------------------------------------- onClipEvent(load) { //サウンドを挿入 snd = new Sound(); snd.attachSound( "BGM" ); //無限ループ再生設定 snd.onSoundComplete = function() { this.start(); }; //サウンドの再生状況を保持する変数 //再生時true、それ以外はfalse play_flg = false; //再生状況に応じたフレームを表示 gotoAndStop( Number( play_flg ) + 1 ); } on(release) { //サウンド再生時は止める if( play_flg ) { snd.stop(); play_flg = false; } //停止中の場合は再生する else { snd.start(); play_flg = true; } //再生状況に応じたフレームを表示 gotoAndStop( Number( play_flg ) + 1 ); } ---------------------------------------- 2つ目のレイヤーには「写真」という名前で写真5枚がフェードインアウトしながら切り替わる、というムービークリップを制作しました。 これをプレビューすると、ムービーは実行されますがBGMは鳴りません。また「サウンドOFF」「サウンドON」のボタンが繰り返してしまいます。 デバック出力で下記エラーと表示されます。 ---------------------------------------- **エラー** シーン = シーン 1, レイヤー = but, フレーム = 1 :行 1:クリップイベントはムービークリップインスタンスでのみ使用可能です。 onClipEvent(load) **エラー** シーン = シーン 1, レイヤー = but, フレーム = 1 :行 21:マウスイベントはボタンインスタンスでのみ使用できます。 on(release) ActionScript エラー数 :2 報告済みエラー :2 ---------------------------------------- どうかどのようにしたらいいのか教えてください。お願いします。

  • 空のMCにLoadした外部画像jpgの名前設定

    いつもお世話になっております。 空のMCを作成し、Photogallery内に使用するJPGイメージを外部から呼び出すようにしているのですが、イメージ自体をマウスでドラッグしたいので各JPGイメージに名前(インスタンス名)を付けたいのですが、うまくいきません。 是非ご教授頂けますと幸いです。 XP、CS4 アクションスクリプト2.0 環境です 現在のスクリプトです。 loadMovie(".../images/image1.jpg", "targetlargeMC"); var targetlargeMC; targetlargeMC = ".../images/image1.jpg"; ドラッグするためのコードは下記です(一応) targetlargeMC.onRollOver = function () { Mouse.hide(); handMC.gotoAndStop("hand"); //startDrag("handMC", true); } handMC.onLoad = function () { gotoAndStop("none"); } var drag_flg:Boolean = false; targetlargeMC.onPress = function() { startDrag(this); this.onMouseMove = function() { drag_flg = true; delete this.onMouseMove; }; }; targetlargeMC.onRelease = targetlargeMC.onReleaseOutside = function () { if (!drag_flg) { gotoAndStop(60); } else { stopDrag(); drag_flg = false; } };

    • ベストアンサー
    • Flash
  • setTimeoutでの制御に関しまして

    初めて質問をさせて頂きます。よろしくお願い致します。 「mc_Image1」、「mc_Image2」、「mc_Image3」という 各ムービークリップをストップボタンを押した際に時間差で停止させたいのですが 「mc_Image2」、「mc_Image3」がstopがかからない状態が稀に生じたりします。 (ムービークリップは全て、1フレーム目にstop();、10フレーム目にgotoAndPlay(2);と設定) 少し端折っておりますが、スクリプトを記載いたします。 ---------------------------- //何回ルーレットしたかカウントする var count:Number = 0; //スタート/ストップボタンが押された押されていないかのフラグ var flg_StartStop:Boolean = false; // mc_Image停止待機速度変数(ミリ秒) var hensu1 = 2000; var hensu2 = 3000; //スタート/ストップボタンを押した時に呼び出される関数 btn_StartStop.onPress = function() { if(flg_StartStop) { //選ばれたフレームに飛ぶ mc_Image1.gotoAndStop(parseInt(one)+1); // setInterval で hensu(ミリ秒)後に_root.gotoAndStop(); を実行 stopID = setInterval(function () { _root.mc_Image2.gotoAndStop(parseInt(two)+1); clearInterval(stopID); }, hensu); stop2ID = setInterval(function () { _root.mc_Image3.gotoAndStop(parseInt(three)+1); clearInterval(stop2ID); }, hensu2); //押されたかどうかの変数を「偽」に flg_StartStop = false; //カウンタを増やす count++; } else { //ムービークリップを走らせる mc_Image1.play(); mc_Image2.play(); mc_Image3.play(); //押されたかどうかの変数を「真」に flg_StartStop = true; } } ---------------------------- 。 きちんと「gotoAndStop();」させるにはどのように対処すれば よろしいでしょうか。 不足がございましたら申し訳ありません。 何卒よろしくお願い致します。

  • ActionScriptで思うような動きを出せず、困っています

    *質問* 現在、ActionScriptを基本的な勉強から初めているのですが、 どうしても分からないところがあり戸惑っております。 皆さんお助言をどうぞお願い致します。 x座標:0.0、y座標:536.5から減速をしながら平行に移動し、 x座標が650以上になったら、x座標:35、y座標:25に向かい、 後方斜め上に移動するという動きを、作っていたのですが、 なかなかうまくいきません。 Scriptは下記の通りに記載致しました。 ============================ onLoad = function(){ maru1.Gox = 700; maru1.Goy = 25; flg = false; } maru1.onEnterFrame = function(){ this._x += (maru1.Gox - this._x)/10; if(this._x >= 650){ maru1.Gox = 35; flg = true; } if(flg = ture){ this._y += (maru1.Goy - this._y)/10; } } ============================ 初歩的な質問で大変申し訳ございませんが、 助言をどうぞよろしくお願い致します。 “環境”Mac OS 10.4、Flash8

  • マウスアウトしているのに、マウスオーバーのままになってしまいます。

    よろしくお願いいたします。 ↓このようなものを作っています。(実際に参考にしているサンプルです。) http://www.oshige.com/flash/mx/swf17/divide_x.html スクリプトは --------------------------------- this.init(); this.onEnterFrame = function() { if (base.hitTest(_root._xmouse, _root._ymouse, false)) { this.rollover(); } else { this.rollout(); } this.resize(); this.setalpha(); }; 以下、function init、function rollout、function rollover、function resize、function setalphaが続きます。 --------------------------------- 最下層のレイヤーに「base」という名前のムービークリップを、ドキュメントと同じサイズ、x=0、y=0で配置。 その上に実際に動かしたいムービークリップが乗っていて、「base」にマウスオーバーしている時にそれぞれのムービークリップの動きをコントロールするというものです。 ですが、マウスを速く動かした時などに、baseからマウスアウトしているにも関わらず、マウスオーバーの状態のままになってしまいます。 色々試してみたところ、実際にbaseやムービークリップが乗っているサイズよりもドキュメントのサイズをかなり大きく取ると解消されたのですが、(サンプルでもそのようになっていました)それではページデザイン上問題があるので・・ スクリプトでどうにかできるものでしょうか? どうぞよろしくお願いいたします。 全然意味が分からない説明になっているかもしれません。不明な点がありましたらご指摘ください。

    • ベストアンサー
    • Flash

専門家に質問してみよう