スライドバーのアクションスクリプト

このQ&Aのポイント
  • スライドバーのアクションスクリプトを作成する際に、ボタンを押したらサイドバーが一定の範囲まで移動する機能を実装する方法について説明します。
  • 現在のスクリプトでは、ボタンを押すとサイドバーが指定の位置まで移動するようになっていますが、元の位置に戻す機能がうまく実装できていません。
  • 具体的には、逆の場合を考慮してelseを使用して条件分岐を行っていますが、うまく動作しないようです。ボタンを押したらサイドバーが元の位置に戻るようにするためには、どのようにスクリプトを修正すればよいか教えてください。
回答を見る
  • ベストアンサー

スライドバーのアクションスクリプト

いつも大変お世話になっております。 伸び縮むサイドバーを作っているのですが、伸ばしたまではいいのですが、元の位置に戻すほうがどうもうまくいきません。 以下、途中まで書いたスクリプトです。 ■.recruit_mcがバーの部分になります。 onClipEvent (load) { _root.recruit_mc._x = 859; _root.recruit_mc._y = 272; } onClipEvent (enterFrame) { rec_to_button.onRelease = function() { _root.recruit_mc.onEnterFrame = function() { if (_root.recruit_mc._x>=620) { _root.recruit_mc._x -= 10; } }; }; } -------------------------------------------------------------- if (_root.recruit_mc._x>=620) { _root.recruit_mc._x -= 10; } の箇所で else を使って、逆の場合をいろいろと書いているのですが どうもうまくいきません。 ボタンを押したら859→620まで移動、またボタンを押したら620→859 まで移動するようにするには、あとどう書き加えればいいですか? ご教授よろしくお願いします。

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

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

  • ベストアンサー
  • is_may
  • ベストアンサー率65% (58/89)
回答No.1

クリックしたときに適当な変数に値(仮に"1")を入れ、もう一度クリックしたときに変数の値が"1"なら"0"にしてX座標を859に、"0"(undefined)なら"1"にしてX座標を620にする、というようなかんじですればいいと思います。 onClipEvent (load) { _root.recruit_mc._x = 859; _root.recruit_mc._y = 272; flag=0;//flag変数を宣言しておく } onClipEvent(enterFrame){ rec_to_button.onRelease = function() { if(!flag){ flag=1; } else { flag=0; } _root.recruit_mc.onEnterFrame = function() { if(flag && _root.recruit_mc._x>=620){ _root.recruit_mc._x -= 10; } else if(!flag && _root.recruit_mc._x<=859){ _root.recruit_mc._x += 10; } }; }; } ですが、少しずつスライドする場合は プロパティ += (移動先[変化先の値] - プロパティ)*遅延率[0<遅延率≦1]; (分かり難くてすみません・。 を使って、 onClipEvent(enterFrame){ rec_to_button.onRelease = function() { if(!flag){ flag=1; } else { flag=0; } _root.recruit_mc.onEnterFrame = function() { if(flag){ this._x += (859-this._x)*0.3; } else { this._x += (620-this._x)*0.3; } }; }; } こんな風にしたほうがいいかと思います。あくまで持論ですけれど。 実際にプログラムを組んで試していないのでひょっとすると動かないかもしれません・・。 余談ですが、途中で書いた公式みたいなやつは結構使えます。 onClipEvent(enterFrame){ this._alpha += (0-this._alpha)*0.2; } でフェードアウトします。(変化先の値が"0")

armstrong-us
質問者

お礼

is_may様 早速のご回答ありがとうございます。 自分でもフラグを立てて試行していたんですが、うまくいかずで。 大変参考になりました。 別途公式のほうもありがとうございます。とても勉強になります。 一番目のものは無事動きました。 二番目のものもif(flag)をif(!flag)にして、ちゃんと動きました。 丁寧に二つ書いてくださってありがとうございます。

関連するQ&A

  • アクションスクリプト ifがうまく働いてくれません…

    こんにちは。 FLASH8、OSwinXP、初心者 です。 アクションスクリプト「if」に関するご相談です。 ●クリップにマウスオン(rollover)するとダイナミックテキスト(_root.texbox_mc.hhh)の数字がカウントダウンされる、というものを作っています。 ★問題は、以下のスクリプトだとカウントダウンを50で止めたいのにスルーしてどこまでもカウントダウンしてしまい、 onClipEvent (load) { hoge = 1; snt = 100; } on (rollOver) { this.onEnterFrame = function() { hoge -= 1; cont = (snt+hoge); _root.texbox_mc.hhh = cont; //(1) if (cont<50) { cont = 50; } } } ★以下のスクリプトだとカウントダウンが50で止まるんですが、マウスオン(rollover)した瞬間、undefined未定義と表示されてから100が表示され、カウントダウンという展開になってしまいます…100からダウンしてくれたらいいんですが…。 onClipEvent (load) { hoge = 1; snt = 100; } on (rollOver) { this.onEnterFrame = function() { _root.texbox_mc.hhh = cont; //←(1)をここに上げるとifは効くが、undefinedが表示されてしまう hoge -= 1; cont = (snt+hoge); if (cont<50) { cont = 50; } } } ☆つまりはundefinedが出ないで100から始まり、50で止まってくれればいいんですが…。 どなたか教えてくださいませ。 前出があるかと検索しても出てきませんでしたが、これに類似したものでもよいのでページ等教えていただければ幸いです。

  • 音のアクションスクリプトについて

    ActionScriptを使った音のスクリプトについて勉強しています。ステージ上に二つの音楽プレーヤーを設置し音楽を流す、という事からはじめてみたのですが、上手く行かずに困っています。 設置した音量+/-ボタンを押すと両方の音量が変わってしまったり、片側を再生している状態で、もう一方を再生すると、もう一方は停止してしまったり(目的的には困らないのですが、本来両方とも再生され音がでているのが本来の姿のようなので)、といった状態です。 何かを間違えた理解と書き方をしていると思うのですが、間違いの指摘や音のアクションスクリプトの書き方についてご教授いただければと思い、質問させていただきました。 複数音楽プレイヤーを設置 という事がしたい場合のアドバイスやご教授をいただきたく思います。 よろしくお願いします。 ステージ  MC01(インスタンス名、I_MC01)   L__MC再生ボタン(インスタンス名、I_saisei)   L__MC音量+ボタン   L__MC再生-ボタン  MC02(インスタンス名、I_MC02)   L__MC再生ボタン(インスタンス名、I_saisei)   L__MC音量+ボタン   L__MC再生-ボタン と二つのシンボルがステージ上に配置し、各MCに再生ボタンと音量+/-ボタンを配置しています。 MC01 onClipEvent (load) {    Hsound_MC01 = new Sound(I_MC01);    Hsound_MC01.attachSound("RS_MC01"); } MC再生ボタン onClipEvent (load) {    Hvol= 50; } on (release) {    _root.I_MC01.Hsound_MC01.stop();    _root.I_MC01.Hsound_MC01.start(); } onClipEvent (enterFrame) {    _root.I_MC01.Hsound_MC01.setVolume(this.Hvol); } MC音量+ボタンon (release) {    if (_root.I_MC01.I_saisei.Hvol<100) {       _root.I_MC01.I_saisei.Hvol += 10; } } と書きました。MC02も同じで、01と02が違うだけです。

    • ベストアンサー
    • Flash
  • 【action script】複数のMCを・・・

    環境:Flash8 actionscript2.0 10こ程度のムービークリップをそれぞれクリックした時に同じ動きをさせる文を1つにまとめることは可能でしょうか? ムービークリップそれぞれに mc1 mc2 mc3 …mc10 とインスタンス名をつけています。 さらにその下位層に mc1  └kai_mc mc2 └kai_mc ・ ・ ・ mc10 └kai_mc と置いています。 このそれぞれのムービークリップをクリックした際、その下位層のムービークリップを次のフレームに移動させたいと考えています。 それぞれ個別に書くと _root.mc1.onRelease=function(){ _root.mc1.kai_mc.nextFrame() } と書いていたのですが、ムービークリップの数を増やすかも知れずムービークリップの数分書くのは大変なので1つにまとめたいと考えています。 自分で以下のように書いてみました。 i=0 for(i=1; i>10; i++){ _root["mc"+i].onRelease.function(){ _root["mc"+i].kai_mc.nextFrame() } } うまくいかないので試行錯誤したりtraceで調べたりしたのですがどうもよくわかりません。 i=0 for(i=1; i>10; i++){ _root["mc"+i].onRelease.function(){ trace(i) } } で出力すると 11と表示されるのでpassが違うとは思うのですが・・・ iを1~10で指定しているのになぜ11となるのでしょうか? どうすればpass指定できるのでしょうか? そもそものやり方、考え方が違うかどうかも含め、教えて頂きたく質問しました。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 揺れるスクリプトについて

    こちらで教えていただいたサイトで揺れるスクリプト を勉強していたのですが、 ■をMCにして、  onClipEvent (load) {    this._xscale = this._yscale = 0;    function sMove(mScale,acc,conv) {      theScale = theScale*acc+(mScale-this._yscale)*conv;      this._xscale = this._yscale += theScale;    }  }  onClipEvent (enterFrame) {    if (this.hitTest(_root._xmouse,_root._ymouse,1)) {      sMove(130,0.8,0.2);    } else {      sMove(100,0.8,0.2);    }  } と書いたのですがプレビューすると真っ白なままなにも 表示されません。 なぜなのでしょうか?

    • ベストアンサー
    • Flash
  • 画像切り替えのアクションスクリプト

    3枚以上の画像を右と左に行くボタンで動かし切り替えて生きたいのですが、ちなみに画像の動き方はだんだん遅くなってとまるというのがベストです。 みようみまねでなんとか次のようにできたのですが、3枚以上はできません。 画像を横に並べて一枚にした画像をシンボルに変換し インスタンス名をpicにして次のスクリプトをそのムービークリップに書き込みました。 this._x = -200; this._y = 0; } onClipEvent (enterFrame) { if (flag==1) { dx = (0-this._x)/4; this._x += dx; } if (flag==0) { dx = (200+this._x)/4; this._x -= dx; } } なお、ボタンを2つ作成し、 on(release) { _root.pic.flag = 1; } と on(release) { _root.pic.flag = 1; }

  • flash as2.0 hitTest()について

    FLASHMXで作業をしています。 mcが壁に当たると反対方向にmcを移動させたいのですが 以下では、うまくいきません。理由がわかりませんし打開策も わかりません。解決策を教えてください。よろしくお願いいたします。 onClipEvent(load){ this._x=100; this._y=380; } onClipEvent(enterFrame){ this._y -=3; if(_root.tama_mc.hitTest(_root.kabe_mc)==true){ this._y +=5; } }

  • 【actionscript2.0】gotoAndStopが解除されず、ループしてしまいます。

    FLASH CS3、actionscript2.0を使う初心者です。 状況説明をしますと、_rootにMCとボタンを置き、タイムライン上にはラベルが3箇所(1フレーム目にlabel1、2フレーム目にlabel2、3フレーム目にlabel3)あります。 label1に置いてあるボタンを押すと、label2に飛び、label2に置いてあるボタンを押すとlabel3に飛び、label3に置いてあるボタンを押すとlabel1に飛ぶという構造になっています。 label1のボタンにはlabel2へ行くという命令が書いてあります。 label1のMCは単純なアニメーションが再生されます。 label2のボタンには on (press) { _root.image2_mc.bg2_mc.setActive(1); } と記述し、 label2のMC(image2_mc)の中にあるMC(bg2_mc)には onClipEvent (load) { var speed = 10; function setActive (bOn) { bActive = bOn; } } onClipEvent (enterFrame) { _x += speed; if (bActive) { speed *= 0.5; } if (speed < 1) this.stop(); timerID = setInterval(function () { _root.gotoAndStop('label3'); clearInterval(timerID); }, 1000); delete (this.onEnterFrame); } } と記述しました。 label3のボタンには以下のようにlabel1に行くという命令が書いてあります。 on(press){ gotoAndplay('label1') } label3のMCは単純なアニメーションが流れます。 label3のボタンを押すと、一瞬だけlabel1が読み込まれるのですが、 すぐまたlabel3に戻ってしまいます。 label2に書いた「1秒後にlabel3へ行く」という命令がdeleteされず、生きているためにそのような現象になるのかと思い、 delete (this.onEnterFrame); のかわりに this.onEnterFrame = null; を記述しましたが、駄目でした。 原因がわかるかた、説明不足で意味不明な場合は補足いたしますので、教えていただけませんでしょうか。 どうぞ宜しくお願いいたします。

  • onEnterFrameで予定の位置で止まってくれない。

    http://www.icnet.ne.jp/~ang74g5c/ ↑このようなものを作ってみました。 フラッシュのサイズは800×600px。 一つの色のパネルの大きさも800×600pxで、様々な色を合わせて3行3列で合計9個のパネルを並べたものをイラストレータで作成してフラッシュに入れ、インスタンス名はcolorpannel(基準点は左上)としました。 右上の番号を押すと想定の位置で止まるようにしたいと思い、フレームに以下の設定をしてみました。 (右上の番号にはそれぞれnum1~num9までのインスタンスネームをつけています。) ------------------------------------- num1.onRelease = function() { _root.onEnterFrame = function() { if (_root.colorpannel._x>=0) { _root.colorpannel._x -= 30; } if (_root.colorpannel._x<=0) { _root.colorpannel._x += 30; } if (_root.colorpannel._y>=0) { _root.colorpannel._y -= 30; } if (_root.colorpannel._y<=0) { _root.colorpannel._y += 30; } }; }; num2.onRelease = function() { _root.onEnterFrame = function() { if (_root.colorpannel._x>=-800) { _root.colorpannel._x -= 30; } if (_root.colorpannel._x<=-800) { _root.colorpannel._x += 30; } if (_root.colorpannel._y>=0) { _root.colorpannel._y -= 30; } if (_root.colorpannel._y<=0) { _root.colorpannel._y += 30; } }; }; num3.onRelease = function() { _root.onEnterFrame = function() { if (_root.colorpannel._x>=-1600) { _root.colorpannel._x -= 30; } if (_root.colorpannel._x<=-1600) { _root.colorpannel._x += 30; } if (_root.colorpannel._y>=0) { _root.colorpannel._y -= 30; } if (_root.colorpannel._y<=0) { _root.colorpannel._y += 30; } }; }; (以下、num9まで座標位置が変わったものだけを記述していますので省略します。) ------------------------------------- URLを見ていただくとわかるように、各色の止まる位置が微妙にズレて隣の色が見えてしまっているのです。 OnEnterFrameなので、座標位置を指定してdeleteで止めれば良いのかな?とは思っているのですが、その書き方もよくわかりません。 どなたか、おわかりにある方がいらっしゃいましたら教えていただけませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • フレーム上からonClipEvent(load){をしていするには

    onClipEvent(load){ this._x = 0; this._y = 0; } というASをフレーム上から書くときはどの様に書けば良いのでしょうか? _root.MC.onEnterFrame = function(){ の様なかたちでやってみたのですがダメだったのですが、上記の様な事がしたい場合どの様にすれば良いのでしょうか。 ご教授ください。よろしくお願いします。

    • ベストアンサー
    • Flash
  • hitTestのロールアウト判定

    auのスライド式メニューなんですが、あれってボタンの中にボタンが入っていますよね?過去記事を読んだところ、「ボタンが重なり合った領域でマウス操作すると手前のインスタンスしかイベントを受け取れない」ので「hitTestを使う」とありました。ただ、ちょっと問題が・・ --問題点--- _________________________ |      |mc|mc|mc|mc| |  余白  | | | | | |      | | | | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ こんな感じなんですが、swfに余白のある左側に出た場合はrollOut処理が働くのですが、余白のない「上、右、下」に出た場合に、処理が働かないんです。on()で記述した場合にはどの方向からでもrolloutするのに何故ダメなのでしょうか? --ActionScript--- onClipEvent (load) {  totalNum=4;leftX=20;rightX=320;mcPos=rightX;speed=5;  function mcSet(myNum){   var i=1;   while(i<=myNum){_parent["cont"+i+"_mc"].setMove("left");i++;}   while(i<=totalNum){_parent["cont"+i+"_mc"].setMove("right");i++;}  }  function setMove(dir) {   if(dir=="left"){mcPos=leftX;}else if(dir=="right"){mcPos=rightX;}   this.onEnterFrame=xMove;  }  function xMove(){   nextX=this._x+(mcPos-this._x)/speed;   if(Math.abs(mcPos-nextX)>0.1){this._x=nextX;   }else{this._x=mcPos;this.onEnterFrame=undefined;}  }  function init(){   var i=1;   while(i<=totalNum){    _parent["cont"+i+"_mc"].setMove("right");i++;   }  } } onClipEvent(enterFrame){  if(this.hitTest(_root._xmouse, _root._ymouse, true)){this.mcSet(1);}else{init();} }

    • ベストアンサー
    • Flash

専門家に質問してみよう