![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
AS3.0でCS5です。
やや略しますがこのような感じでASでダイナミックテキストを表示させています。
package
{
public class test extends MovieClip
{
public function test()
{
var textInput:TextArea = new TextArea();
var textOutput01:TextField = new TextField();
var textOutput02:TextField = new TextField();
var textOutput03:TextField = new TextField();
textOutput01.text = 'あああ';
textOutput02.text = 'いいい';
textOutput03.text = 'ううう';
addChild(textInput);
addChild(textOutput01);
addChild(textOutput02);
addChild(textOutput03);
}
}
}
実現したいことは、
1:ダイナミックテキストをクリックすると文字がテキストエリアに表示
2:ダイナミックテキストの移動(ドラッグ&ドロップ)
ステージに配置する場合であれば、
1:ステージにダイナミックテキストを配置
2:ダイナミックテキストをムービークリップに変換
これでいいと思うのですが、ASだけでこのようなことを実現するには
どうすればいいのでしょうか?
ダイナミックテキストのままでは、クリックもできないのでムービークリップに
変換しなければ無理かと考えております。
ちなみに、テキストエリアに表示された文字を変更すればダイナミックテキストにも
反映されるものにしたいのでダイナミックテキストは外せません^^;
No.2ベストアンサー
- 回答日時:
#1です。
> ■症状
> テキストエリアをステージに配置せずASだけで作成し
> プレビュー(Ctrl+Enter)すると
> 必ずエラーになります。
>
> ■解決策
> ASはそのままで、ステージにテキストエリアを配置しこれを削除してからプレビューすると
> 問題なく表示されるのですが、これはなぜなのでしょうか?
一体全体何を書かれているのでしょうか?
テキストエリアをステージに配置するようにしなけれなならない状況にしているのは
私ではなく質問者さん自身ですよ。
ご質問のスクリプトで
> var textInput:TextArea = new TextArea();
と書かれていますよね?
こう書かれている以上,
TextArea をライブラリに登録しておく必要があるのでしょう?
質問する際にそういう状況だったからこそ,そのスクリプトが書けたのでしょう??
本来,そのようにしておくことに関しては
質問者の方が
「テキストエリアをライブラリに登録してある状態でスクリプトを実行しています」
などと書くべきことです。
質問者が書くべきその事項を書かれていないので
私が後にこのページを見た方が混乱しないよに
質問者に代弁して #1 で,
「本体FLAドキュメントのライブラリには
TextAreaコンポーネントがすでに登録されているものとします。」
と書いているのです。
(なお,ステージ上に配置しただけでもライブラリに自動登録されるので使えます。)
そもそも TextArea というのは
Adobe の人がコンポーネントとして作ったムービークリップです。
わかりますでしょうか?
一般的な テキストフィールド など 元の Flash に内包されているものとは違って
TextAreaコンポーネントは
ムービークリップの中にテキストフィールド などを入れて
Adobe の人が ユーザ にとって使いやすいように ActionScript もろとも
その構造を "Flashで" 作ったムービークリップです。
少なくともそういう構造をしたムービークリップを
ライブラリに登録しておかなければ
そのムービークリップを new で呼び出して使えないでしょう?
そういうことですよ。
とにかく。
#1で
「本体FLAドキュメントのライブラリには
TextAreaコンポーネントがすでに登録されているものとします。」
と書かせる状況を作ったのは私ではありません。
なぜ質問者が勝手に作った状況を
回答者である私が説明にないとならないのか,,,
全くもって疑問ですし,本末が転倒しています。。。
============================
> this["mc"+i].buttonMode = true;
>
> できれば、指のマークにしたいのですが
> 良い解決策はありますでしょうか?
そうすれば
テキストフィールド内にマウスでアクセスできなくなりますが良いのですよね?
これも,
くれぐれも誤解のないように書いて置きますが
そのような状況(テキストフィールド にアクセスできなくなる状況)にしようとしているのは
質問者さんですよ(つまり回答者である私ではありませんよ。)
親であるムービークリップの
mouseChildren を false にすれば良いです。
具体的には
for (var i:int = 1; i<=3; i++) {
//ムービークリップ「mc1~3」を作成
this["mc" + i] = new MovieClip();
//「mc○」のプロパティを適当に決める
this["mc"+i].x=10;
this["mc"+i].y=30+(i*30);
this["mc"+i].buttonMode=true;
//メインタイムラインに「mc○」を配置
addChild(this["mc"+i]);
の部分を
for (var i:int = 1; i<=3; i++) {
//ムービークリップ「mc1~3」を作成
this["mc" + i] = new MovieClip();
//「mc○」のプロパティを適当に決める
this["mc"+i].x=10;
this["mc"+i].y=30+(i*30);
this["mc"+i].buttonMode=true;
//★↓付け加え
this["mc"+i].mouseChildren = false;
//メインタイムラインに「mc○」を配置
addChild(this["mc"+i]);
のようにすれば良いです。
長文のご説明ありがとうございます。
ライブラリに登録してあるからこそのASなのですね^^;
ASで書かれているものは、ステージ上に見えるものがないケースが
多かったので、ASだけでどうにかなるものかと勘違いしておりました・・・
カーソルの件も思う通りになりました!本当にありがとうございます。
No.1
- 回答日時:
> ダイナミックテキストのままでは、
> クリックもできないのでムービークリップに
> 変換しなければ無理かと考えております。
と書かれていらっしゃいますが
「ダイナミックテキストをムービークリップに変換する。」
というマニュアル操作の手順を
そのままスクリプト化しようとしていらっしゃるからできないのではないかと思います。
とにかくまずは『先にオブジェクトありき』です。
先にムービークリップ(またはスプライト)インスタンスというオブジェクトを作って
そのインスタンスの中にダイナミックテキストを作成すれば良いでしょう。
本体FLAドキュメントのライブラリには
TextAreaコンポーネントがすでに登録されているものとします。
その場合の
ドキュメントクラスファイル「test.as」のスクリプト例です。
//--------------------------------------------------
package {
//使用クラスのインポート
import fl.controls.TextArea;
import flash.display.MovieClip;
import flash.text.TextField;
import flash.events.MouseEvent;
//「test」クラス
public class test extends MovieClip {
//使用変数の宣言
var textInput:TextArea;
var mc1:MovieClip;
var mc2:MovieClip;
var mc3:MovieClip;
var textOutput01:TextField;
var textOutput02:TextField;
var textOutput03:TextField;
//ドラッグ中のMCを登録する変数
var targetMC:MovieClip;
//コンストラクタ
public function test() {
//テキストエリア「textInput」を作成
textInput = new TextArea();
//「textInput」のプロパティを適当に決める
textInput.x=10;
textInput.y=20;
textInput.width=100;
textInput.height=25;
//メインタイムラインに「textInput」を配置
addChild(textInput);
for (var i:int = 1; i<=3; i++) {
//ムービークリップ「mc1~3」を作成
this["mc" + i] = new MovieClip();
//「mc○」のプロパティを適当に決める
this["mc"+i].x=10;
this["mc"+i].y=30+(i*30);
this["mc"+i].buttonMode=true;
//メインタイムラインに「mc○」を配置
addChild(this["mc"+i]);
//
//ダイナミックテキスト「textOutput01~03」を作成
this["textOutput0"+i] = new TextField();
//「textOutput0○」のプロパティを適当に決める
this["textOutput0"+i].border=true;
this["textOutput0"+i].width=100;
this["textOutput0"+i].height=25;
//「mc○」内に「textOutput0○」を配置
this["mc"+i].addChild(this["textOutput0"+i]);
//;
//「textOutput0○」をクリックしたときに関数「showText」を実行;
this["textOutput0"+i].addEventListener(MouseEvent.CLICK,showText);
//;
//「mc○」をプレスしたときに関数「dragMC」を実行;
this["mc"+i].addEventListener(MouseEvent.MOUSE_DOWN,dragMC);
}
//ダイナミックテキスト「textOutput01~03」に文字を表示;
textOutput01.text="あああ";
textOutput02.text="いいい";
textOutput03.text="ううう";
}
//関数「showText」の定義
private function showText(evt:MouseEvent):void {
//テキストエリア「textInput」に
//クリックしたダイナミックテキストの文字を表示
textInput.text=evt.currentTarget.text;
}
//関数「dragMC」の定義
private function dragMC(evt:MouseEvent):void {
//プレスしたMCを変数に登録
targetMC=MovieClip(evt.currentTarget);
//プレスしたMCをドラッグ開始
targetMC.startDrag();
//ステージ上でマウスアップ時に関数「dropMC」を実行;
stage.addEventListener(MouseEvent.MOUSE_UP,dropMC);
}
//関数「dropMC」の定義
private function dropMC(evt:MouseEvent):void {
//ドラッグ中のMCのドラッグを終了
targetMC.stopDrag();
//マウスアップ時に関数「dropMC」を実行するのを解除;
stage.removeEventListener(MouseEvent.MOUSE_UP,dropMC);
}
}
}
//--------------------------------------------------
『まずは「mc○」を作成してメインタイムラインに配置して
次に「textOutput0○」を作成して「mc○」内に配置して
配置した「textOutput0○」や「mc○」に
イベントリスナー(マウス動作時のイベント動作関数)を登録して行く』
という内容です。
この回答への補足
もう1点すみません^^;
カーソルの設定がうまく効いていないようでした。
this["mc"+i].buttonMode = true;
できれば、指のマークにしたいのですが良い解決策はありますでしょうか?
お返事ありがとうございます。
まさにその通りで、マニュアルの(ステージに配置して作成する)手順で考えており
ずっと悩んでおりました。
わかりやすい説明でおかげさまで解決です!
もうひとつ不明な点があるのですが、宜しければ教えてください。
■症状
テキストエリアをステージに配置せずASだけで作成しプレビュー(Ctrl+Enter)すると
必ずエラーになります。
■解決策
ASはそのままで、ステージにテキストエリアを配置しこれを削除してからプレビューすると
問題なく表示されるのですが、これはなぜなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像表示をアルファでフェード...
-
○秒間実行 AS3
-
アセンブリ言語のcasl2について...
-
photoshopで書いた四角の枠の中...
-
python ボタンを押すと複数の関...
-
VBAからPDFのテキストフィールド
-
RPG(AS400)の本、サイトってあ...
-
【VB.NET】別Formのボタンが押...
-
static関数がmapファイルに載ら...
-
VBAで改行の入ったデータの正規...
-
accessの検索について質問です...
-
360度パノラマ写真をループでき...
-
AS3.0 でフェードイン、
-
フォームのテキストの入力数字...
-
【Photoshop】レイヤー効果の境...
-
場面が移り変わるときかっこよ...
-
外部テキストファイルより座標...
-
Flashでレーダーチャート
-
多言語を混在できるか。
-
ウインドウハンドルとインスタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画像表示をアルファでフェード...
-
ムービークリップ変換について...
-
ActionScript スクロールメニュー
-
何で重なり合おうとするんでし...
-
ステージにある複数のインスタ...
-
for文を使ったボタン
-
配列に入れたムービークリップ...
-
○秒間実行 AS3
-
Actionscript3.0 子のイベント...
-
Actionscript3.0のクラス定義の...
-
FLASH 定型のASを登録しといて...
-
addChildの使い方
-
外部テキスト読み込みでマーキ...
-
AS3の配列の中にアクセス
-
関数を停止するには。。。。
-
as3 addEventListenerの動的な...
-
actionscript3.0 オブジェクト...
-
actionscript3.0 データ型について
-
複数mcのランダム再生とmc指定...
-
photoshopで書いた四角の枠の中...
おすすめ情報