ActionScriptの初心者です。
なかなか上手くいかず困っています。

createTextFieldで作成したTextFieldをマウスのドラッグ&ドロップで移動可能にしようとしています。
onMouseDownのイベントで、クリックされたTextFieldの名前を拾おうとし、this._nameを表示してみましたが、TextFieldをクリックしても表示されません。
どのようにすれば、クリックされたTextFieldを認識しつかむことができるでしょうか?
どなたか御指導お願いします。
宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

#1です。


すみません サンプル2 の訂正です。

> 親MCの中に,テキストフィールドと子MCを作成して,
> 子MCとマウスがヒットしていれば,
> 親MCのドラッグを開始する。
> というような方法を取る必要が出てきます。

と書きましたが,
よく考えると,テキストフィールドをムービークリップに入れた時点で,
テキストフィールド自体がムービークリップの中身そのものになりますから,
透明な塗りの 子MC などを作成する必要はありませんでした。

したがいまして,
サンプル2のスクリプトを次のように訂正します。


//////////////////////////////////////////////////////////////
// 表示位置と文字の大きさの設定
// x座標(※可変)
var my_x = 100;
// y座標(※可変)
var my_y = 50;
// 横の長さ(※可変)
var my_w = 160;
// 高さ(※可変)
var my_h = 20;
//
//------
// 空のムービークリップ my_mc1 を 深度 0 に作成
_root.createEmptyMovieClip("my_mc1", 0);
//
// テキストフィールド my_text を my_mc1 の深度0 に作成
_root.my_mc1.createTextField("my_text", 0, my_x, my_y, my_w, my_h);
// テキストフィールド my_text のプロパティを設定
_root.my_mc1.my_text.border = true;
_root.my_mc1.my_text.type = "input";
_root.my_mc1.my_text.text = "ドラッグ&入力できますよ";
//
//------
// リスナー用インスタンスを作成
var my_obj = new Object();
// マウスダウン時の動作定義
my_obj.onMouseDown = function() {
// もし my_mc1 が マウスとヒットしていれば
if (_root.my_mc1.hitTest(_root._xmouse, _root._ymouse)) {
// my_mc1 をドラッグ開始
_root.my_mc1.startDrag();
}
};
// マウスアップ時の動作定義
my_obj.onMouseUp = function() {
_root.my_mc1.stopDrag();
};
// インスタンスをマウスクラスのリスナーに登録
Mouse.addListener(my_obj);
//////////////////////////////////////////////////////////////
    • good
    • 0

ドラッグするには startDrag などのスクリプトを使われていると思いますが,


startDrag はムービークリップクラスのメソッドですよ。
テキストフィールドクラスのメソッドではありません。

したがって,テキストフィールドをドラッグしたいときは,
ムービークリップの中にテキストフィールドを作成して,
ムービークリップごとドラッグする必要があります。


===サンプル1=========

新規ドキュメントを作成して,
フレーム1 (フレームは1つしかないはずです) に,
次のスクリプトを コピペ して,
「制御」→「ムービープレビュー」してみてください。
スクリプトを書く(コピペする)以外に何かを作成する必要はありません。

-------------------------------------------
// 表示位置と文字の大きさの設定
// x座標(※可変)
var my_x = 100;
// y座標(※可変)
var my_y = 50;
//
//------
// 空のムービークリップ my_mc を 深度 0 に作成
_root.createEmptyMovieClip("my_mc", 0);
//
// テキストフィールド my_text を my_mc の深度0 に作成
_root.my_mc.createTextField("my_text", 0, my_x, my_y, 0, 0);
// テキストフィールド my_text のプロパティを設定
_root.my_mc.my_text.border = true;
_root.my_mc.my_text.autoSize = true;
_root.my_mc.my_text.text = "ドラッグできますよ";
//
//------
// my_mcプレス時
_root.my_mc.onPress = function() {
this.startDrag();
};
//
//------
// my_mcからマウスを放したとき
_root.my_mc.onRelease = function() {
this.stopDrag();
};
//
//------
// ドラッグアウトしたときもマウスを放したときと同じく
_root.my_mc.onDragOut = _root.my_mc.onRelease;
-------------------------------------------


各スクリプトの意味は,コメント行に書いてありますから,
詳しい説明は省略しますが,
とにかく,以上のようにしなければなりません。



/////////////////////////////////////////////////////////////////////

上のものは,いわゆるダイナミックテキストです(入力不可)。
テキスト入力にしたい場合はさらに複雑になります。

親MCの中に,テキストフィールドと子MCを作成して,
子MCとマウスがヒットしていれば,
親MCのドラッグを開始する。
というような方法を取る必要が出てきます。


===サンプル2=========

サンプル1のスクリプトを全部消し,
次のスクリプトを コピペ して,
「制御」→「ムービープレビュー」してみてください。
これも,スクリプトを書く(コピペする)以外に何かを作成する必要はありません。

--------------------------------------------------------
// 表示位置と文字の大きさの設定
// x座標(※可変)
var my_x = 100;
// y座標(※可変)
var my_y = 50;
// 横の長さ(※可変)
var my_w = 160;
// 高さ(※可変)
var my_h = 20;
//
//------
// 空のムービークリップ my_mc1 を 深度 0 に作成
_root.createEmptyMovieClip("my_mc1", 0);
//
// テキストフィールド my_text を my_mc1 の深度1 に作成
_root.my_mc1.createTextField("my_text", 1, my_x, my_y, my_w, my_h);
// テキストフィールド my_text のプロパティを設定
_root.my_mc1.my_text.border = true;
_root.my_mc1.my_text.type = "input";
_root.my_mc1.my_text.text = "ドラッグ&入力できますよ";
//
//------
// 空のムービークリップ my_mc2 を my_mc1 の深度0 に作成
_root.my_mc1.createEmptyMovieClip("my_mc2", 0);
// my_mc2内に透明な四角を描画
with (_root.my_mc1.my_mc2) {
beginFill(0x0000FF, 0);
lineStyle(0, 0xFFFFFF, 0);
moveTo(my_x, my_y);
lineTo(my_x+my_w, my_y);
lineTo(my_x+my_w, my_y+my_h);
lineTo(my_x, my_y+my_h);
endFill();
}
//
//------
// リスナー用インスタンスを作成
var my_obj = new Object();
// マウスダウン時の動作定義
my_obj.onMouseDown = function() {
// もし my_mc2 が マウスとヒットしていれば
if (_root.my_mc1.my_mc2.hitTest(_root._xmouse, _root._ymouse)) {
// my_mc1 をドラッグ開始
_root.my_mc1.startDrag();
}
};
// マウスアップ時の動作定義
my_obj.onMouseUp = function() {
_root.my_mc1.stopDrag();
};
// インスタンスをマウスクラスのリスナーに登録
Mouse.addListener(my_obj);
--------------------------------------------------------


このサンプル2を動かしてみるとわかると思いますが,
いわゆるところの,
ダイナミックテキストのテキスト選択可能バージョンは無理ですね。
文字を選択しようと思えば,ドラッグされてしまいます。
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Qthis._x と this._yをドラッグした後の値に変更したい

バージョンはFLASH8です。
attachMovieメソッドでインスタンスを作成しました。
インスタンスは複数あり、作成した後にドラッグして場所を入れ替えます。
それぞれのインスタンスを衝突判定します。赤い箱のムービークリップに衝突したら、インスタンスは箱に入り、青い箱に衝突したら元の場所に戻るようにしたいのです。
どうしても、その「元の場所」が移動した後の座標ではなく、最初にインスタンスを作成した座標になってしまうので、困っています。

どうぞ宜しくお願い致します。

Aベストアンサー

> その「元の場所」が移動した後の座標ではなく、

難しい書き方で,
結局,「元の場所」とはどこなのかよくわかりませんね。
青い箱の場所にドラッグして 移動した後の場所 は青い箱の場所なわけですから,
青い箱にヒット状態の場所ということになります。
これは変ですね。

勝手な推測ですが,
「元の座標」とは, 移動した後の座標 ではなく,
「ドラッグを開始」した場所なのではないでしょうか。
ここで言う「ドラッグを開始した場所」というのは,
最初の最初にドラッグを開始した場所(最初にインスタンスを作成した座標)ではなく,
青い箱に衝突するすぐ前にドラッグを開始した場所です。

失敗作の「最初にインスタンスを作成した座標」に戻るスクリプトを書いてくださった方が,
変形しやすく答えやすかったと思いますが,
勝手に作った状況では次のようにスクリプトを書けば,
青い箱に衝突したらその前にドラッグを開始した場所に戻る物はできます。

次のスクリプトは,
_root(メインムービーのステージ上)に「blueMC」というインスタンス名のムービークリップがあったとして,
ドラッグするムービークリップのフレーム1に書くスクリプトの例です。

---------------------------------------
// ---マウスプレス時の処理 ---
this.onPress = function() {
// ドラッグ開始
this.startDrag();
// ドラッグ開始時の座標を記録
my_x = this._x;
my_y = this._y;
};
// --- マウスアップ時の処理 ---
this.onRelease = function() {
// ドラッグ終了
this.stopDrag();
// もし blueMC にヒットしていたら
if (this.hitTest(_root.blueMC)) {
// ドラッグ開始時の座標に戻す
this._x = my_x;
this._y = my_y;
}
};
-------------------------------------


勝手に解釈している部分があり,
勝手な状況を想定した回答です。

誤解している可能性も大きいです。
とんちんかんな回答をしていましたらすみません。

> その「元の場所」が移動した後の座標ではなく、

難しい書き方で,
結局,「元の場所」とはどこなのかよくわかりませんね。
青い箱の場所にドラッグして 移動した後の場所 は青い箱の場所なわけですから,
青い箱にヒット状態の場所ということになります。
これは変ですね。

勝手な推測ですが,
「元の座標」とは, 移動した後の座標 ではなく,
「ドラッグを開始」した場所なのではないでしょうか。
ここで言う「ドラッグを開始した場所」というのは,
最初の最初にドラッグを開始した場所(最初...続きを読む

Q【ActionScript】onLoad後の「this」がパスの役目を果たさない

FLASH8(Win-XP)使用者です。
Flashで使う「this」がよくわかりません。
相対パスで記述することを前提としておたずねしたいのですが、
たとえば、

this.txtField1.text = 'abc';
my_lv = new LoadVars();
 my_lv.onLoad = function(success){
  this.txtField2.text = 'xyz';
 }
my_lv.load("data.txt");

とすると「abc」は表示されても「xyz」は表示されません。
this.txtField2.textのthisを削除すればいいのですがtxtField2にパス(らしきもの)がなくなってしまい気に入りません。
あとで置換するとき不便ですし…
単に「txtField2.text」と書くしかないのでしょうか?
お詳しい方、よろしくお願いいたします。

Aベストアンサー

しっかしまあ,
ikataro さんは次から次へと追究されて難題をよく発見されますね,スゴイ。
いつもながら感心しております。


この回答は長いですが,本題は最後だけです。
その本題とは ☆★☆★… より下です。
☆★☆★… より上は,
そうなる理由や私の単なる悪足掻きやが書いてあるだけなので適当に無視&スルーしてください。


まずできない理由ですが,
ご質問で書かれていらっしゃる,
その this の指す物は,my_lv ですから,
 this.txtField2.text = 'xyz';
では,
 my_lv.txtField2.text = 'xyz';
ということになってしまします。

my_lv の中には txtField2 は存在しないので,
当然 _root の txtField2 には何も表示されません。

ここまでが,
 this.txtField2.text = 'xyz';
ができない理由です。
理由は簡単ですね。


this はいつもムービークリップの階層を示すわけではないので,
LoadVarsインスタンス以外でもそういうことは起こります。
例として同様のことはボタンインスタンスでも起こります。

_root に my_btn というボタンを手動で作成して,
_root のフレームに次のように書くと失敗します。

---失敗例------------------
this.txtField1.text = 'abc';
my_btn.onRelease = function() {
this.txtField2.text = 'xyz';
};
--------------------------

しかし,
次のように書くと成功します。

---成功例-------------------
this.txtField1.text = 'abc';
my_btn.onRelease = function() {
this._parent.txtField2.text = 'xyz';
};
----------------------------

というような感じで,
ボタンインスタンス については解決済みだったので,
LoadVarsインスタンス についても同様だろうと勝手に思っていました。
そして今まで思っていただけで深く追究していませんでした。



しかし!!!!!
LoadVarsインスタンス はボタンインスタンスともまた違うようです。
次のようにすると,みごと失敗しました。

---失敗例------------------
this.txtField1.text = 'abc';
my_lv = new LoadVars();
my_lv.onLoad = function(success) {
this._parent.txtField2.text = 'xyz';
};
my_lv.load("data.txt");
----------------------------


こんな↓ことをしてみても失敗します。

---失敗例------------------
// 「data.txt」 には 「atai=123」 というデータを用意済
this.txtField1.text = 'abc';
this.createEmptyMovieClip("my_mc", 0);
my_mc.my_lv = new LoadVars();
my_mc.my_lv.onLoad = function(success) {
this._parent.txtField2.text = 'xyz';
trace("ロード自体は成功します");
trace(this.atai);
};
my_mc.my_lv.load("data.txt");
---------------------------

ムムムム難しい...。

その他
つまり,試行錯誤しても,
LoadVarsインスタンス については良い解決策が考えつきませんでした。

解決策が見つからない場合は「検索」です。



☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

ここからが本題です。

ikataro さんの探究心もスゴイと思いますが,
他にも同様のことを追究している方がいらっしゃいました。
スゴイ方はいらっしゃるのですね↓。


「*ここのthisは何を指しているのか?LoadVars()の攻略」
http://hima.chu.jp/flash/tips/whatisthis.htm
 ~引用~
> では、どうやって、a_txt(TextField)へ、
> ロードしたテキストの結果を表示すればよいのでしょうか?
> _root からの絶対パス指定?
> これは、確実ですが、面倒ですし、
> MovieClipの使いまわし(再利用)ができなくなります。
> そこで、以下のように、
> 独自の変数を付け加えることで対処できました。
> オブジェクトに独自変数を付け加える
>
> function loadData() {
>  var recv_lv:LoadVars = new LoadVars();
>  recv_lv.a_txt = this.a_txt;
>  recv_lv.onData = function (src) {
>   trace(this.a_txt);
>   this.a_txt.text = src;
>  }
>  recv_lv.load("setting.txt");
> }



つまり,
ご質問の場合はこうすれば成功します↓。

---☆成功例☆----------------
this.txtField1.text = 'abc';
my_lv = new LoadVars();
// ★ココがポイント↓
my_lv.txtField2 = this.txtField2;
my_lv.onLoad = function(success) {
this.txtField2.text = 'xyz';
};
my_lv.load("data.txt");
-----------------------------


言われてみればなるほどという感じですね。
パスの変数化の一種です。
簡単な例として,
_root に a_mc を用意して,a_mc の中にさらに b_mc を用意したとします。

 _root
  └a_mc
    └b_mc

そして,_root のフレームに次のように書くと,
b_mc が動きます。

--------------------------------
myvar = this.a_mc.b_mc;
this.onEnterFrame = function() {
myvar._x += 10;
};
--------------------------------

これと同じようなことだと思います。



ちなみに上のページは次の様に検索して,
2番目あたりにスパッと出てきたページです。
Google 検索 「"this" LoadVars」
http://www.google.co.jp/search?hl=ja&q=%22this%22+LoadVars&lr=

答えもシンプル,検索語彙も意外とシンプルで良かったのでした。
☆★☆★… より上の私の悪足掻きは何だったんだろう?
という感想です。

しっかしまあ,
ikataro さんは次から次へと追究されて難題をよく発見されますね,スゴイ。
いつもながら感心しております。


この回答は長いですが,本題は最後だけです。
その本題とは ☆★☆★… より下です。
☆★☆★… より上は,
そうなる理由や私の単なる悪足掻きやが書いてあるだけなので適当に無視&スルーしてください。


まずできない理由ですが,
ご質問で書かれていらっしゃる,
その this の指す物は,my_lv ですから,
 this.txtField2.text = 'xyz';
では,
 my_lv.txtField2.text = ...続きを読む

QActionScriptをつかってテキストボックス内の文字を変更する方法

Flash Mx 2004をつかってつくっています。
テキストボックスから文字を送信して別のテキストボックスに表示させます。
送信するごとに赤にしたり青にしたりしたいのです。
一行目は赤・二行目は青、三行目は黒みたいに。
そんなことって可能でしょうか?
どうかご教授おねがいします。

Aベストアンサー

//my_txt はテキストフィールドのインスタンス名

//HTML表現をtureにして
my_txt.html = true;

//以下のように書けば部分的に色を変えることが出来るので、
//行ごとに色を変えることが可能です。
my_txt.htmlText = "<font color=\"#FF0000\">aiueo</font>";

すでに表示されている文字に色をつけるには、
(例えば3行目を変えたいとき)
1行目と2行目+<font …略…>3行目</font>+残りの行
で出来ると思います。

Qドラッグ&ドロップ

ドラッグ&ドロップして果物3個をお皿3つに吸着させたいのですが、
例えば、果物一つをまず、お皿一つどれかに吸着させた後2個目の果物が他の二つのお皿にドラッグ可能であることがわかるように果物をドラッグさせた時点でお皿の色が変わるようにしたいのです。最初の果物をどの皿にいれても、他の二皿が変わるようにするにはどうすればいいでしょうか?
説明がわかりにくいとは思いますがどうぞよろしくお願いします。flagやif文をつかえばいいのでしょうか?

Aベストアンサー

#1です。

> 一個目の果物をプレスした時点で、
> 3皿にドラッグ可能である事がわかるように色を変えて、
> まず一個の果物を皿におきます。
> 二個目の果物をプレスした時、
> ほかの2皿にドラッグ可能である事がわかるように
> 色を変えたいです。

はは~ぁ,なるほど。
ちょっと難しいですね。
中学高校の 集合 や 余事象 なんかがが頭の中を回りますよ。


仮に,
皿 は「osara0」,「osara1」,「osara2」 の3枚があった場合です。
また,果物にもインスタンス名を付けます。
果物のインスタンス名は 「kudamono0」,「kudamono1」,「kudamono2」,「kudamono3」,「kudamono4」,の5個があった場合です。

各果物MCに書くスクリプトです。

------------------------------------
onClipEvent (load) {
// osara の枚数を登録
var o_num = 3;
// kudamono の個数を登録
var k_num = 5;
}
//
on (press) {
// ドラッグ開始(中央に吸着)
startDrag(this, true);
// 全ての osara を フレーム2 に進ませる
for (var i = 0; i<o_num; i++) {
_root["osara"+i].gotoAndStop(2);
}
// もし,osara が kudamono のどれかとヒットしていれば
for (var i = 0; i<o_num; i++) {
for (var j = 0; j<k_num; j++) {
if (_root["osara"+i].hitTest(_root["kudamono"+j])) {
// その osara を フレーム1 へ
_root["osara"+i].gotoAndStop(1);
}
}
}
}
//
on (release) {
for (var i = 0; i<o_num; i++) {
//ドラッグ中のMCの真下にosara? があれば
if (_root["osara"+i].hitTest(_root._xmouse, _root._ymouse, true)) {
// ドラッグ中のMCを osara? に吸着
this._x = _root["osara"+i]._x;
this._y = _root["osara"+i]._y;
}
}
//
// 全ての osara を フレーム1 に進ませる
for (var i = 0; i<o_num; i++) {
_root["osara"+i].gotoAndStop(1);
}
// ドラッグ終了
stopDrag();
}
//
onClipEvent (mouseMove) {
updateAfterEvent();
}
------------------------------------


これは,
ActionScript が難しいのではなくて,
場合の数などを考える数学が難しいのだと思います。多分。

ActionScript では,
hitTest (当たり判定)くらいが難しいかもしれません。
「当たり判定について」
http://hakuhin.hp.infoseek.co.jp/main/as/hittest.html

他は,VBA でも JavaScript でも何処にでも登場する for文 くらいですか。
http://isvalid.jp/actionscriptLab/ASlesson/actionsctipt_for.html



==================

しかし,
上の通りだと果物MCに同じ事を書くのは労力とファイル容量の無駄ですし,
どこか1箇所訂正したいときでも全ての果物MCのスクリプトを直す必要も出てきて,
間違いも起こりうるので,
果物MCには "何も書かず",
果物MC「kudamonno0」~「kudamono4」が存在する _root のフレームに,
次のように書いても良いです。


--------------------------
// osara の枚数を登録
var o_num = 3;
// kudamono の個数を登録
var k_num = 5;
//
//
for (i=0; i<k_num; i++) {
_root["kudamono"+i].onPress = function() {
// ドラッグ開始(中央に吸着)
startDrag(this, true);
// 全ての osara を フレーム2 に進ませる
for (var i = 0; i<o_num; i++) {
_root["osara"+i].gotoAndStop(2);
}
// もし,osara が kudamono のどれかとヒットしていれば
for (var i = 0; i<o_num; i++) {
for (var j = 0; j<k_num; j++) {
if (_root["osara"+i].hitTest(_root["kudamono"+j])) {
// その osara を フレーム1 へ
_root["osara"+i].gotoAndStop(1);
}
}
}
};
}
//
for (i=0; i<k_num; i++) {
_root["kudamono"+i].onRelease = function() {
for (var i = 0; i<o_num; i++) {
//ドラッグ中のMCの真下にosara? があれば
if (_root["osara"+i].hitTest(_root._xmouse, _root._ymouse, true)) {
// ドラッグ中のMCを osara? に吸着
this._x = _root["osara"+i]._x;
this._y = _root["osara"+i]._y;
}
}
//
// 全ての osara を フレーム1 に進ませる
for (var i = 0; i<o_num; i++) {
_root["osara"+i].gotoAndStop(1);
}
// ドラッグ終了
stopDrag();
};
}
//
_root.onMouseMove = function() {
updateAfterEvent();
};
--------------------------


ますます for文が増えますが,
これで,
1つ1つの果物MCに同じ事を書き続ける必要はなくなります。

#1です。

> 一個目の果物をプレスした時点で、
> 3皿にドラッグ可能である事がわかるように色を変えて、
> まず一個の果物を皿におきます。
> 二個目の果物をプレスした時、
> ほかの2皿にドラッグ可能である事がわかるように
> 色を変えたいです。

はは~ぁ,なるほど。
ちょっと難しいですね。
中学高校の 集合 や 余事象 なんかがが頭の中を回りますよ。


仮に,
皿 は「osara0」,「osara1」,「osara2」 の3枚があった場合です。
また,果物にもインスタンス名を付けます。
果物の...続きを読む

Qドラッグアンドドロップアンドスムーズ移動

x:0,y:0の座標に置いてあるムービークリップを
好きな場所にドラックができて話した瞬間x:0,y:0の座標に戻るという
スクリプトが書きたいのですが、戻り方をだんだんとスムージングしていくような形で戻したいと思います。
以下をうまく組み合わせて実行したいと思っています。
どなたかご教授お願いします。

on (press) {
this.startDrag();
}
on (release) {
this.stopDrag();
}

onClipEvent (enterFrame) {
xpos = 0;
ypos = 0;
this._x += (xpos-this._x)/2;
this._y += (ypos-this._y)/2;
}

Aベストアンサー

マウスを放すイベントハンドラはもう一つ「releaseOutside」が必要です。
マウスを離したときにマウスポインタの下にMC(ムービークリップ)が無かった場合、「release」が反応せず、ドラッグが解除されません。

↑の方法では毎回onEnterFrameを処理しているので基点に戻った後もずっと(0,0)に行こうとするので少しどんくさいですよね。
AS3.0からはMCに直接onClipEventやonが記述できなくなりましたので、少しずつ「ターゲット.onEnterFrame=function(){};」の方法に慣れるのもいいかもしれません。
この方法だと最初から最後まで動き続ける「onClipEvent(enterFrame){}」と違い、後で解除することも出来るので処理を軽くすることが出来ます。

on (press) {
if (this.onEnterFrame) {
delete this.onEnterFrame; //onEnterFrameがまだ働いていたら終了(MCが基点に戻る前にMCを再度クリックした場合)
}
this.startDrag ();
}
on (release, releaseOutside) {
this.stopDrag ();
this.onEnterFrame = function () { //onEnterFrameを開始
this._x += (0 - this._x) * 0.3; //基点に戻す
this._y += (0 - this._y) * 0.3;
if (Math.abs (this._x) < 0.2 && Math.abs (this._y) < 0.2) { //スライド移動でほぼ(0,0)まで戻ってきたら強制的に(0,0)に移動し、onEnterFrameを終了
this._x = 0;
this._y = 0;
delete this.onEnterFrame;
}
};
}

マウスを放すイベントハンドラはもう一つ「releaseOutside」が必要です。
マウスを離したときにマウスポインタの下にMC(ムービークリップ)が無かった場合、「release」が反応せず、ドラッグが解除されません。

↑の方法では毎回onEnterFrameを処理しているので基点に戻った後もずっと(0,0)に行こうとするので少しどんくさいですよね。
AS3.0からはMCに直接onClipEventやonが記述できなくなりましたので、少しずつ「ターゲット.onEnterFrame=function(){};」の方法に慣れるのもいいかもしれません。
この方...続きを読む


おすすめ情報