• 締切済み

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

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です。

みんなの回答

回答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

専門家に質問してみよう