プロが教える店舗&オフィスのセキュリティ対策術

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

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

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で質問しましょう!