重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (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;
}
}


期待したとおりの動きになっているか分りませんが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
お礼が大変遅くなってしまい申し訳ございません。

教えていただいた通りにやってみたところ、確かに余白は表示されなくなりました。
しかし、期待していた動きとは少し違いました(すみません)。
教えていただいたものだと、常に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の左下の角に向かって縮小させたいと思っています。
大変分かりづらい説明の仕方で申し訳ないのですが、
もしお分かりでしたらご教示いただけると助かります。
よろしくお願いいたします。

お礼日時:2011/08/23 14:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!