• 締切済み

縮小させる時の基点について

ActionScriptを勉強中です。分からないことがあるので質問させていただきます。 ステージ上にマスクをかけたムービークリップ(インスタンス名:mc)があり、 そのmcを拡大ボタンと縮小ボタンを使い拡大/縮小できるようにしています。 mcが拡大されている時には、mc自体をドラッグして動かせるようにしています。 レイヤー構造は ーーーーーーーーーーーーーーーーーーーーーーーーーーーー 1、ボタン:拡大ボタンと縮小ボタンを配置 2、マスク ---マスクの対象:mcを配置 3、背景:背景というか枠を書いています ーーーーーーーーーーーーーーーーーーーーーーーーーーーー となっております。 mcにには ーーーーーーーーーーーーーーーーーーーーーーーーーーーー on (press) { left = Stage.width-this._width/2-2; top = Stage.height-this._height/2-98; right = this._width/2+2; bottom = this._height/2+2; this.startDrag(false, left, top, right, bottom); } on (release, releaseOutside) { this.stopDrag(); } ーーーーーーーーーーーーーーーーーーーーーーーーーーーー 拡大ボタンには ーーーーーーーーーーーーーーーーーーーーーーーーーーーー on (release) { if (mc._yscale < 300) { mc._xscale = mc._yscale += 100; } else { mc._xscale = mc._yscale = 300; } }ーーーーーーーーーーーーーーーーーーーーーーーーーーーー 縮小ボタンには ーーーーーーーーーーーーーーーーーーーーーーーーーーーー on (release) { if (mc._yscale > 100) { mc._xscale = mc._yscale -= 100; } else { mc._xscale = mc._yscale = 100; } } ーーーーーーーーーーーーーーーーーーーーーーーーーーーー と書いています。 拡大した時の挙動は問題ないのですが、縮小する時の挙動に問題があります。 mcの中心を基点にしているため、端の方でで縮小すると余白が見えてしまいます。 この余白を見せないためにはどうしたら良いのでしょうか? 素人考えでhitTest()を使えば良いのかと思っているのですが、なかなかうまくいきません。 どうしたらよいのかご教示いただけると助かります。よろしくお願いいたします。 制作環境はCS4でAS2.0です。

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

みんなの回答

回答No.1

シンボルに変換する際にムービークリップmcの基準点を中心にしてください。 デフォルトでは左上が基準点になっているので注意。 //ドラッグするムービークリップ インスタンス名mc onClipEvent(Load){ mw = this._width;//mcの基準となるwidth mh = this._height;//mcの基準となるheight xs = this._x;//mcの基準となるx座標 ys = this._y;//mcの基準となるy座標 } on (press) { var top = ys + (mh - this._height) / 2; var left = xs - (mw - this._width) / 2; var right = xs + (mw - this._width) / 2; var bottom = ys - (mh - this._height) / 2; this.startDrag(false, left, top, right, bottom); } on (release, releaseOutside) { this.stopDrag(); } //拡大ボタン on (press) { var tgt = _root.mc;//ターゲットの設定 var inc = 10;//拡大量 if (tgt._yscale<300) { tgt._xscale = tgt._yscale += inc; } else { tgt._xscale = tgt._yscale = 300; } } //縮小ボタン on (press) { var tgt = _root.mc;//ターゲットの設定 var dec = 10;//縮小量 if (tgt._yscale >100 && tgt._yscale - 100 > dec) { tgt._xscale = tgt._yscale -= dec; }else{ tgt._xscale = tgt._yscale = 100; } if(tgt._x != tgt.xs){ tgt._x=tgt.xs; tgt._y=tgt.ys; } } 期待したとおりの動きになっているか分りませんが。

666_bbb
質問者

お礼

ご回答ありがとうございます。 お礼が大変遅くなってしまい申し訳ございません。 教えていただいた通りにやってみたところ、確かに余白は表示されなくなりました。 しかし、期待していた動きとは少し違いました(すみません)。 教えていただいたものだと、常にmcの中心を基点に縮小されてしまいます。 mcが以下のものだとして ┌─┬─┬─┐ │1│2│3│ ├─┼─┼─┤ │4│5│6│ ├─┼─┼─┤ │7│8│9│ └─┴─┴─┘ はじめの状態 ┌─┬─┬─┐ │1│2│3│ ├─┼─┼─┤ │4│5│6│ ├─┼─┼─┤ │7│8│9│ └─┴─┴─┘ 拡大した状態 1│ 2 │3 ─┼───┼─  │   │  4│ 5 │6  │   │  ─┼───┼─ 7│ 8 │9 拡大したものをドラッグ │ 4 │ 5 │   │   ├───┼── │   │   │ 7 │ 8 │   │  └───┴── ここで縮小すると 1│ 2 │3 ─┼───┼─  │   │  4│ 5 │6  │   │  ─┼───┼─ 7│ 8 │9 このようになってしまいます。 ちなみに私がはじめの質問に書いたものは ■■├───┼ ■■│   │  ■■│ 7 │  ■■│   │  ■■└───┴ ■■■■■■■ ■■■■■■■ こんな感じでした(■:余白)。 これを7の左下の角に向かって縮小させたいと思っています。 大変分かりづらい説明の仕方で申し訳ないのですが、 もしお分かりでしたらご教示いただけると助かります。 よろしくお願いいたします。

関連するQ&A

  • ムービークリップの拡大縮小

    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
  • loadMovie の拡大縮小

    初めまして、ActionScript についてご質問があります。 loadMovie で外部ファイルのswfを、ムービークリップ「screen」で表示させています。 ボタンで以下のActionScriptを使って、 「screen」を拡大縮小しようと思っております。 on(release){ screen._xscale *=1.2; //幅を1.2倍に拡大 screen._yscale *=1.2; //高さを1.2倍に拡大 } on(release){ screen._xscale /=1.2; //幅を1/1.2倍に縮小 screen._yscale /=1.2; //高さを1/1.2倍に縮小  } これだと無限に拡大縮小ができてしまいます。 上限下限を設定することは可能でしょうか? よろしくお願いいたします。

    • ベストアンサー
    • 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(); }; -----

  • 拡大を制限するアクションスクリプト

    いつもお世話になっています。 on(release){ _root.screen._xscale-=20; _root.screen._yscale-=20; } と、ボタンに入れて『screen』の部分を拡大、縮小するようにしました。 が、このままだと、どこまでも拡大・縮小できてしまうので、拡大・縮小の回数を制限するような方法や、一度拡大・縮小したものを元の状態に戻す方法はありますか? on(release){ this.play(); } この形だと、1フレーム目に戻ってしまいます。 1フレーム目に戻らない形で、元の状態に戻せるといいのですが・・・

    • ベストアンサー
    • Flash
  • 外部SWFの中のムービークリップを拡大したい

    こんばんわ! ちょっとわからないことがあるので質問があります。 よろしくお願いします。 メインの空ムービー(インスタンス名"loadpoint")に外部SWF"hallo.swf"を読み込むとします。 メインに取り付けた拡大、縮小ボタンで 外部SWF"hallo.swf"の中のムービクリップ(インスタンス名"touten_mc")を拡大させるにはどのようにしたらよろしいでしょうか? ※ 拡大ボタンにいれたスクリプト 単純に on(release) _root.loadpoint.touten_mc._xscale = 110; _root.loadpoint.touten_mc._yscale = 110; } 結果できませんでした よろしくおねがいします。

    • ベストアンサー
    • Flash
  • FLASH アクションスクリプト

    画面のサイズを拡大縮小しても 常にセンターに表示させる アクションスクリプトで質問がございます。 back_mcが【背景】 main_mcが【オブジェクト】 _root.main_mc._x = ( Stage.width - _root.main_mc._width ) /2; _root.main_mc._y = ( Stage.height - _root.main_mc._height) /2; このアクションスクリプトで【オブジェクト】が最初から常にセンター表示になる事は分かるのですが、例えば座標x600 y500で始まるようにするのはどうしたら良いのでしょうか。 下記のアクションスクリプトでは、【オブジェクト】がx600 y500の位置に最初はあるのですが画面のサイズを拡大縮小してもピクリとも動きません。 Stage.align = "TL"; Stage.scaleMode = "noScale"; Stage.addListener(this); this.onResize = function() { _root.main_mc._x = 600;( Stage.width - _root.main_mc._width ) /2; _root.main_mc._y = 500;( Stage.height - _root.main_mc._height) /2; _root.back_mc._width = Stage.width; _root.back_mc._height = Stage.height; } this.onResize(); いまいち分かりにくい質問ですが伝わりますでしょうか。 分かる方、宜しくお願い致します。

    • ベストアンサー
    • Flash
  • ASで降らせた雪のマスクの掛け方について。

    下記のサイトのASを使用させていただき、雪の降るFlashを作成したのですが、 参照サイト : http://www.webdesignlibrary.jp/2006/06/flash_snow.php このスクリプトで降らせた雪を、例えば星型の図形をマスクにして、 その範囲内で雪が降るようにしたいと思い、 色々と丸一日掛けて調べたのですが、全く上手く行きません。 とりあえず、色々と調べてみた結果、 【 xxx.setMask 】 を使えば良いのだろうか・・?、、、と言う所までは 行き着いたのですが、スクリプトを、どう改造?してみても、全く思う結果が得られません。 【 _root.setMask 】 で、ステージ全体を、目的の図形MCでマスクする事で、 思う結果に近しいカタチは出来たのですが、_root.setMask でステージをマスクしてしまうと、 例えば、マスク外に何か画像処理を施したくても、マスク外の画像は全て消えてしまいますし、 その画像の大きさ込みでマスクを作成すると、その画像の上にも雪が降ってしまうので、 完全に行き詰ってしまっています。 ASで降らせた雪だけをマスクする方法はありますでしょうか? どなたか、ご存知の方がいらっしゃいましたらば、 是非にご教示願えますと、大変ありがたいです。  何卒よろしくお願い申し上げますm(_ _)m 以下、使用AS ------------------------------------------------ width = 550; height = 400; total = 200; for (var t = 0; t != total; t++) { var mc = _root.attachMovie("snowflake", "snowflake"+t, _root.getNextHighestDepth()); mc._x = (Math.random()*(width+20))-10; mc._y = (Math.random()*(height+20))-10; mc.yspeed = (Math.random()*1.75)+0.25; mc.speed = (Math.random()*3)+2; mc._xscale = mc._yscale=(mc.speed+mc.yspeed)*10; mc.onEnterFrame = function() { var angle = Math.atan2(_root._xmouse-(width/2), _root._ymouse)+1.5707963267949; this._y += Math.sin(angle)*this.speed+this.yspeed; this._x += Math.cos(angle)*this.speed; if (this._x>width+10) { this._x = -10; } else if (this._x<0-10) { this._x = width+10; } if (this._y>height+10) { this._y = -10; } else if (this._y<0-10) { this._y = height+10; } }; } ------------------------------------------------ 【 AS使用環境 】 Adobe Flash CS3, アクションスクリプト2.0

    • ベストアンサー
    • Flash
  • Flashで画像を拡大縮小する時の画像の荒れを防止する方法を教えてください。

    Flashで、「画像にマウスが乗ると拡大する」というムービークリップを作っています。 画像は、拡大した時のサイズで作成し、Flashに読み込んでいるのですが、 ファイルサイズを縮小する時、プレビューすると画像が荒れてしまいます。 それを回避する方法教えていただければとても助かります。 拡大縮小の指示は(画像のMCに) onClipEvent(load){ wideX = [245,300]; a = 0; function move(x){ a = x; } } onClipEvent(enterFrame){ this._height = 0.666*this._width; //縦横比を固定 this._width += (wideX[a] - this._width)/3; } です。 横幅300pxで取り込んだ画像の横幅を、245pxか300pxにしています。

    • ベストアンサー
    • Flash
  • センターに配置

    一つのムービークリップに onClipEvent (enterFrame) { xm = (Stage.width-this._width)/2; ym = (Stage.height-this._height)/2; this._x += (xm-this._x)/4; this._y += (ym-this._y)/4; } というアクションシュクリプトを書いています。 ところがです! そのムービークリップに on (release) { gotoAndPlay("01"); } と追記して指定のフレームラベル"01"に飛んでくれましぇん… なぜでしゅか? ムービークリップの中にボタンを入れて on (release) {...を記入したりまたが だめです。 ボタンをウィンドの上下左右センターに配置する方法、 もしくはムービークリップが指定のフレームラベルに行ってくれる方法を教えて下さい!!! もう、うんこしていてドアを開けられたときくらいびっくりしています。いや、苦しんでいます。

  • MCクリックで任意の場所を中心に拡大したい

    ステージの中心にMCを配置し、MCをクリックすると、クリックした座標を中心に徐々に拡大させたいのですが、うまくいきません。 拡大をしない場合は、 MC._x -= MC._xmouse; MC._y -= MC._ymouse; でクリックした箇所が中心になるのですが、 拡大していくとうまく計算できず大きくずれてしまいます。 onEnterFrameでMC._xscale、MC._yscaleが100から20ずつ増加し 最終的に200になるようにしているのですが、 この場合クリックした箇所を中心に拡大するにはどのように計算すれば良いでしょうか?

    • ベストアンサー
    • Flash

専門家に質問してみよう