- ベストアンサー
createTextFieldで生成したテキストをマウス移動したい
ActionScriptの初心者です。 なかなか上手くいかず困っています。 createTextFieldで作成したTextFieldをマウスのドラッグ&ドロップで移動可能にしようとしています。 onMouseDownのイベントで、クリックされたTextFieldの名前を拾おうとし、this._nameを表示してみましたが、TextFieldをクリックしても表示されません。 どのようにすれば、クリックされたTextFieldを認識しつかむことができるでしょうか? どなたか御指導お願いします。 宜しくお願い致します。
- みんなの回答 (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); //////////////////////////////////////////////////////////////
その他の回答 (1)
ドラッグするには 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を動かしてみるとわかると思いますが, いわゆるところの, ダイナミックテキストのテキスト選択可能バージョンは無理ですね。 文字を選択しようと思えば,ドラッグされてしまいます。