suzuka rollOverで画像が徐々に拡大する

このQ&Aのポイント
  • マウスが画像に乗ると拡大し、離れると元のサイズに戻る方法について
  • フレームアクションを使用してマウスオーバーで画像を拡大し、マウスアウトで元のサイズに戻す方法があります
  • 実装する際には、変数を使用して現在の画像サイズの状態を判断し、適切な倍率に設定する必要があります
回答を見る
  • ベストアンサー

suzuka rollOverで画像が徐々に拡大する

マウスがその画像の上に乗るとずずずっと画像がある倍率まで大きくなり、 その画像の上を離れたとたんにずずっと元のサイズに戻る記述はいかようにするのでしょうか。 フレームアクションにて img_flag = false; my_img.onRollOver = function(){  if(!img_flag){   my_img._xscale = my_img._yscale = 130;  }else{   my_img._xscale = my_img._yscale = 100;  }  img_flag = !img_flag; }; 上記だと画像の左上から右下に向かってズームしてしまいますし、 何よりずずずっという動きがありません。 お時間のあるかたなにとぞお願いします。

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

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

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

こんにちは >そのボタン自体のロールオーバー機能が無効に ロールオーバー時の画像の入れ替えですが、スプライト自体のタイムラインで簡単に出来ます。 1、スプライトに通常時の画像を登録します、するとその画像がタイムラインの1フレーム目にキーフレームが入ります。 2、ロールオーバー時の画像をタイムラインに登録、この時、2フレーム目にキーフレームがくるように入れます。 3、一番上にフレームアクションを挿入し、1、2フレームにキーフレームをいれ、簡易アクションで構わないので、1、2の両フレームで、this,停止,を選択します。 4、メインのタイムラインに戻り、スプライトを選択し、スクリプトを編集、そこに直接スクリプトを書きます。 //ballにマウスが乗った時 on(rollOver){ //スプライトのタイムライン、2フレーム目に移動 gotoAndPlay(2); } //ballからマウスが退いた時 on(rollOut){ //スプライトのタイムライン、1フレーム目に移動 gotoAndPlay(1); } こんな感じでロールオーバー時に画像を変える事ができます。わかりにくいかも知れませんが、一応ですが、スプライト編集時の画像を添付します。

raryrary
質問者

お礼

できました!!! でもスプライトはなかなか難しいですね・・・ http://mikawa.sakuraweb.com/abc/img/flaaaa.html

その他の回答 (1)

回答No.1

こんにちは Suzakaでのボタン画像の拡大・縮小は昔、自身でもやったので一応そのときのものを書きます。 尚、 >上記だと画像の左上から右下に向かってズームしてしまいます。 はスプライトの基準点が真ん中になっていない為かと思われますので、スプライトのプロパティを開き基準点を画像の半分の値にされるといいと思います。 サンプル ボタンのスプライト名"ball" 縦幅50px・横幅50pxの場合 //初期設定、ここで大きくなる速度の設定をします。 var b=5; //スプライト"ball"に適用される動作(onRollOverされた時)=over function over(){ //動作定義 this.onEnterFrame=function(){ //x軸(横幅)の大きさ。フレーム毎に10増加 this._xscale+=b; //大きさが200を超えると if(this._xscale>200){ //停止 this._xscale=200; } //y軸(縦幅)の大きさ。フレーム毎に10増加 this._yscale+=b; //大きさが200を超えると if(this._yscale>200){ //停止 this._yscale=200; } }; }; //スプライト"ball"に適用される動作(onRollOutされた時)=out function out(){ //動作定義 this.onEnterFrame=function(){ //x軸(横幅)の大きさ。フレーム毎に10減少 this._xscale-=b; //大きさが100以下になると if(this._xscale<100){ //停止 this._xscale=100; } //x軸(横幅)の大きさ。フレーム毎に10減少 this._yscale-=b; //大きさが100以下になると if(this._yscale<100){ //停止 this._yscale=100; } }; }; //スプライト"ball"にマウスが重なると、動作overを適用 //以下同文 _root.ball.onRollOver=over; //スプライト"ball"からマウスが出ると、動作outを適用 //以下同文 _root.ball.onRollOut=out; 以上 このやり方だと最後の部分(_root.ball.onRollOver=over;)でスプライトを増やし、同じ動きをさせる事ができます。 例 _root.スプライト名1.onRollOver=over; _root.スプライト名2.onRollOver=over; _root.スプライト名3.onRollOver=over; こんな感じで出来ます。 参考になればと思います。

raryrary
質問者

補足

ありがとうございました、助かりました! マウスのロールオーバーとロールアウトのズームはできました。 ところで、ロールオーバー時に画像が変わるボタンを作っておいて (通常は直立した人間の画像、マウスを乗せると吹き出しが右上に出る) それを教えていただいた記述でズームに組み込みましたが そのボタン自体のロールオーバー機能が無効になってしまいました。 これはどうにもできないのでしょうか。 たびたび申し訳ありません。

関連するQ&A

  • 画像を中央にズームさせるには

    Flash超初心者です。 小さな画像が2、3個横に並んでいて、一つをクリックすると中央にズームし、他の画像をクリックすると先にズームされていた画像がもとの小さな画像に戻るようにしたいです。 http://www.suntory.co.jp/sho-chu/srk/urabanashi.html 過去ログに参考になるものがあり http://oshiete1.goo.ne.jp/kotaeru.php3?q=1444680 少し変更して下記のようにしました。 onClipEvent (load) { yScl = this._yscale; xScl = this._xscale; yPos = this._y; xPos = this._x; } on (rollOver) { this.onEnterFrame = function() { this._yscale *= 1.1; this._xscale *= 1.1; if (this._yscale>=yScl*2.5) { this._yscale = yScl*2.5; this._xscale = xScl*2.5; this.swapDepths(++_root.Depth); } }; } on (rollOut, dragOut) { this.onEnterFrame = function() { this._yscale *= 0.9; this._xscale *= 0.9; this._y += (yPos-this._y)*0.3; this._x += (xPos-this._x)*0.3; if (this._yscale<=yScl) { this._yscale = yScl; this._xscale = xScl; this._y = yPos; this._x = xPos; this.onEnterFrame = null; } }; } でも、これは画像のある同じ場所でズームするので画面の中央でズームさせたいです。 座標を指定すればいいという理屈はわかるのですが、どの部分にどういASを入れたらいいのがわかりません。 また、上記のASでは、ズームしたあとマウスがオブジェクトからはずれると画像がもとの大きさにもどってしまいます。 on (rollOut, dragOut)と入れているからでしょうが、では何を入れたらいいの悩んでしまいましてご相談させていただきました。 どなたかご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ムービークリップの拡大縮小

    MCをクリックしたら拡大・縮小をさせたく、過去の投稿を参考にしながら、以下のscriptを作りました。 onClipEvent(load){ v_orgScale = this._xscale; v_orgX = this._x; v_orgY = this._y; zoomState = false; } on(release, releaseOutside){ zoomState = !zoomState;  this.onEnterFrame = function(){   if( zoomState ){    if(this._xscale >= v_orgScale*2.3){     delete this.onEnterFrame;    }else{     this._xscale *= 1.1;     this._yscale *= 1.1;    }   }else if( !zoomState){    if(this._xscale <= v_orgScale){     this._xscale = v_orgScale;     this._yscale = v_orgScale;     delete this.onEnterFrame;    }else{     this._xscale *= 0.9;     this._yscale *= 0.9;    }   }  }; } ただ、これだとMCの基準点(0,0)に対しての拡大縮小なのでクリックしたポイントが拡大するにつれてどんどんずれていきますよね? これをクリックしたポイントがずれないように拡大縮小する事は可能でしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • マウスオーバー(クリック)画像がでズーム

    下記のサイトのように画像にマウスが乗ったら、ズームするようにしたいのですが、どのようなスクリプトを書いているのでしょうか? http://www.bobscube.com/ もしくは下記のサイトのようにクリックすると画像がズームするサイト。スクリプト的には同じ(マウスクリックとマウスオーバーの違い)じゃないかと思うのですが・・・。 http://www.opfa.org/ 単純に画像がズームするだけなら、こちらのサイトに載っていた↓で出来るのですが、上記サイトのように滑らかにズームする方法が分かりません。 onClipEvent (load) { this._yscale = 100; this._xscale = 100; } on (rollOver) { this._yscale = 200; this._xscale = 200; } on (rollOut) { this._yscale = 100; this._xscale = 100; } ご教授宜しくお願い致します。

    • ベストアンサー
    • Flash
  • FlashCS5 ActionScript2.0で3つのボタンを制御し

    FlashCS5 ActionScript2.0で3つのボタンを制御しています。 それぞれインスタンス名はbt1,bt2,bt3です。 動きはマウスオーバーで120%大きくなり、ロールアウトで100%へと戻るものです。 しかし、ロールアウトの動作中に他のボタンに触ると、ロールアウトの動作が中断してしまいます。 なぜでしょうか? //////////////////////////////////////// stop(); sx = 3; var i; //----------- for( i = 1; i < 4; i++){ Nov = "bt" + i; _root[Nov].onRollOver = function(){ Name = this._name; btOverMotion(Name); } _root[Nov].onRollOut = function(){ Name = this._name; btOutMotion(Name); } } //----------- function btOutMotion(eachNo){ No = eachNo; onEnterFrame = function(){ if(_root[No]._xscale < 100){ delete this.onEnterFrame; }else{ _root[No]._xscale -= sx*2; _root[No]._yscale -= sx*2; } } } //----------- function btOverMotion(eachNo){ No = eachNo; onEnterFrame = function(){ if(_root[No]._xscale > 120){ delete this.onEnterFrame; }else{ _root[No]._xscale += sx; _root[No]._yscale += sx; } } }

    • ベストアンサー
    • Flash
  • マウスを近づけるとオブジェクトが拡大するメニューなのですが・・・

    アクションスクリプトのサンプルソースは以下です。 (関係がありそうな箇所だけ) サンプルでは、横に並べているメニューなのですが 私は縦にやってみたくて・・・ しかし、このソースのままだとどうしても プレビューすると「ななめ」になってしまうのです。 どこをどう改造すればいいのでしょうか? } onClipEvent (enterFrame) { //三平方の定理を利用してマウスからの距離を求める mx = _parent._xmouse; my = _parent._ymouse; ox = this._x; oy = this._y; sx = (ox - mx)*(ox - mx); sy = (oy - my)*(oy - my); s = Math.sqrt(sx + sy); //距離が50以下の時に拡大 if(s<=100){ this._xscale = scl + (100-s)*1.5; this._yscale = scl + (100-s)*1.5; }else{ this._xscale = scl; this._yscale = scl; } 初歩的な事で申し訳ありませんが よろしくお願いします。

    • ベストアンサー
    • Flash
  • ブラウザに合わせる拡大・縮小する背景画像について

    よろしくお願い致します。 親swfの中にあるmc.bgに外部swfを表示しています。 このmc.bgはブラウザに合わせて拡大・縮小できるように、下記のス クリプトをメインフレームに入れています。 外部swfのひとつに、画像が100%で表示されてから少しづつ拡大して 次の画像へ切り替わるというスライドショーのswfがあるのですが、 (画像が表示・拡大する部分はモーショントゥイーンで制作しています) このswfを親swfに読み込んで表示しているときにブラウザをリサイズすると、外部swfがブラウザに合わなくなり、画像(外部awf)がmc.bgより小 さく表示されてしまいます。 (ブラウザのリサイズをしなければ問題ありませんでした) 外部swfの画像の拡大・縮小に関わらず、常にブラウザに合わせて拡大・ 縮小できるようにするにはどうすればよいのでしょうか? 色々検索したのですが、該当するものがありませんでした。 ほとほと困っております。どうぞよろしくお願い致します。 ※フレームに挿入しているスクリプトです。 ----- R = Stage.height/Stage.width; Stage.scaleMode = "noScale"; Stage.align = "LT"; function bgScale() { w = Stage.width; h = Stage.height; if (w*R>h) { bg._width = w; bg._yscale = bg._xscale; } else { bg._height = h; bg._xscale = bg._yscale; } bg._x = w/2; bg._y = h/2; menuMC._x = w-20; menuMC._y = h-20; } sListener = new Object(); sListener.onResize = function() { bgScale(); }; -----

  • scriptを使いまわしたい。

    見よう見まねで下記のようなスクリプトを記述しています。 複数のムービークリップに設定していますが、編集するのにかなり手間がかかります。うまく使いまわす方法はございませんでしょうか…。 また、記述の仕方にも問題等ありましたらご指南ください。。 onClipEvent (load) {  sx_move = Math.floor(Math.random() * -10) - 3;  sy_move = Math.floor(Math.random() * 6) - 3;  s_scale = Math.floor(Math.random() * 40) + 40;  _xscale = (s_scale);  _yscale = (s_scale);  n = 1; } onClipEvent (enterFrame) {  _x += (sx_move);  _y += (sy_move); } on (rollOver) {  mx.behaviors.DepthControl.bringToFront(_root);  this.onEnterFrame = function () {   n += 1;   _x -= (sx_move);   _y -= (sy_move);   if (n < 20) {    _x = (_x + 25) / 1.5;    _y = (_y + 12) / 1.5;    _xscale = (_xscale + 50) / 1.5;    _yscale = (_yscale + 50) / 1.5;   } else if (n < 40) {    stop();   } else if (n < 50) {    _x += 13;    _y += 13;    _alpha -= 20;    _xscale = (_xscale) / 1.2;    _yscale = (_yscale) / 1.2;   } else {    stop();   }  }; }

    • ベストアンサー
    • 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
  • Flash ActionScript(アクションスクリプト)の挙動

    Flash ActionScript(アクションスクリプト)の挙動が 思うようにならず困っています。 ●使用ツール  Macromedia Flash MX ●やりたいこと  ムービークリップ【mc_4_0】【mc_4_1】【mc_4_2】が配置されている。  各ムービークリップにマウスが乗っているかを毎フレーム判定し、  乗っていればx/yscaleを1.5倍に、乗っていなければ1倍に戻す。 ●現在の処理  ○メインタイムラインの処理 ---------------------------- //最初のシーンを設定 _global.scene = SceneMcSelect //毎フレーム、シーン関数を呼ぶ onEnterFrame = function() { //現在シーンを呼ぶ eval( _global.scene )(); } ----------------------------  ○SceneMcSelect関数の定義 ---------------------------- function SceneMcSelect(){ for( count = 0 ; count < 3 ; count++ ){ //マウスが乗ったか? eval("mc_4_" + count).onRollOver = function(){ trace(count); eval("mc_4_" + count)._xscale = 150; eval("mc_4_" + count)._yscale = 150; } //マウスが離れたか? eval("mc_4_" + count).onRollOut = function(){ trace(count); eval("mc_4_" + count)._xscale = 100; eval("mc_4_" + count)._yscale = 100; } } } ---------------------------- ●現在の挙動  onRollOverやonRollOutの判定は正しく行われているようですが、  x/yscaleの変更処理が行われません。  traceでcountの値を確認すると、なぜか【3】になっています。 難しい処理をしているわけではないと思うのですが、 思うとおりの挙動にならず困っています。 何か間違いや見落とし等ございましたら、ご指摘お願いいたします。

    • ベストアンサー
    • Flash
  • プリローダーで、画像を下から上に表示する方法

    プリローダーというと普通はバーで0%から100%に近づくにつれて 左から右に伸びるのがよくあるパターンですが バーの代わりに何らかの画像が下から上に向けて現れてくるように するにはどのようにすれば宜しいのでしょうか? バーをpngで読み込んだ画像に変えて _root.xxxx._xscale = percent;xscaleを _root.xxxx._yscale = percent;に書き換えても 全く反映されません。 ちなみにMX2004を使っています。 あと、静止画像とはちょっと違うかもしれませんが http://www.flashcomponents.net/upload/samples/431/index.html 上記のサイトのように下から上に上がっていくのは どのようなスクリプトになっているのでしょうか?