• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ムービークリップ変換について質問です。)

AS3.0でのダイナミックテキストのクリックと移動方法について

BlurFiltanの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答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○」に イベントリスナー(マウス動作時のイベント動作関数)を登録して行く』 という内容です。

dcx147
質問者

お礼

お返事ありがとうございます。 まさにその通りで、マニュアルの(ステージに配置して作成する)手順で考えており ずっと悩んでおりました。 わかりやすい説明でおかげさまで解決です! もうひとつ不明な点があるのですが、宜しければ教えてください。 ■症状 テキストエリアをステージに配置せずASだけで作成しプレビュー(Ctrl+Enter)すると 必ずエラーになります。 ■解決策 ASはそのままで、ステージにテキストエリアを配置しこれを削除してからプレビューすると 問題なく表示されるのですが、これはなぜなのでしょうか?

dcx147
質問者

補足

もう1点すみません^^; カーソルの設定がうまく効いていないようでした。 this["mc"+i].buttonMode = true; できれば、指のマークにしたいのですが良い解決策はありますでしょうか?

関連するQ&A

  • テキストフィールドかの色情報からムービークリップの色が変わるようにした

    テキストフィールドかの色情報からムービークリップの色が変わるようにしたいです。ActionScript3.0です。 ●colBox2というテキストフィールドがあり、bmpData(BitmapData型)という場所で取得したRGB色情報が表示されるようになっています。(例えば赤ならFF0000というように)。 var colBox2:TextField = new TextField(); colBox.x = 450; addChild(colBox2); ●bmpData上でマウスを上げたらその場所の色情報がcolBox2上に表示されて、colBox2上のテキストを読み取って、boardというムービークリップの色が変わるようにしたいのですが、エラーこそ出ないですが、boardの色は変わらないです。どうずれば変更できるのでしょうか?宜しくお願いします。 var colorTrans:ColorTransform = new ColorTransform(); var trans:Transform = new Transform(board); trans.colorTransform = colorTrans; copy.addEventListener(MouseEvent.MOUSE_UP,mouseUp) function mouseUp(evt:MouseEvent){ var pixelValue:uint = bmpData.getPixel(evt.stageX,evt.stageY); colBox2.text = pixelValue.toString(16);//取得したカラーを代入 colorTrans.color = "0x" + colBox2.text as uint; trans.colorTransform = colorTrans; }

    • ベストアンサー
    • Flash
  • (AS3)ムービークリップからメインタイムラインにある関数を呼び出したい

    質問はタイトルの通りです。 実は以前同じ質問(http://oshiete1.goo.ne.jp/qa3811855.html)をしましたところ、次のような回答をいただきました。 「 [メインタイムライン] function aaa(){ trace("ok") } [testMC] this.addEventListener(MouseEvent.CLICK , onClick) var rootObj:MovieClip = this.root as MovieClip; function onClic(event:MouseEvent):void{ rootObj.aaa(); } 」 たしかに、この方法はムービークリップ(testMC)をステージに手動で配置したときには有効でしたが、stage.addChild()を使って配置したときには関数を呼び出すことができませんでした。 ちなみに、呼び出そうとすると次のようなエラーがでます。 「 ReferenceError: Error #1069: flash.display.Stage にプロパティ aaa が見つからず、デフォルト値もありません。 」 stage.addChild()で配置したムービークリップから、メインタイムラインの関数を呼び出すにはどうすればよいのでしょうか? 困っています。どうか力を貸してください。

    • ベストアンサー
    • Flash
  • ActionScript3.0のfor文の処理について質問させてくださ

    ActionScript3.0のfor文の処理について質問させてください。 画面に9つのTextFieldを作って、テキストを表示させています。 そして、ステージをクリックしたら、そのテキストが消えるという流れにしたいのです。 どうすればできるのでしょうか? あれよこれよと色々試して書いたスクリプトが var b:int = 0; for(b; b<10; ++b) { var introA:TextField = new TextField(); var introB:TextField = new TextField(); introA.name = "introA"+b; introB.name = "introB"+b; addChild(introA); addChild(introB); introA.htmlText = "aaa"+b; introB.text = "bbb"+b; introA.x= 30; introB.x= 130; introA.y= 30*b; introB.y= 30*b; } stage.addEventListener(MouseEvent.CLICK, cont); function cont(ev:MouseEvent):void{ introA.htmlText = ""; introB.text = ""; } -------- これだと、最後のひとつしか消えてくれません。 どうすれば全部のテキストが消えるのか、どなたかご指導よろしくお願いします。

    • ベストアンサー
    • Flash
  • AS3リンケージ設定したムービークリップの中で、フレーム移動がしたいです。

    初心者です。 AS3で、 リンケージ設定したムービークリップを addChildで呼び出し、 呼び出したムービークリップの中の、 指定したフレームに移動するにはどうしたら宜しいでしょうか。 ステージに配置した場合、インスタンス名を付けて インスタンス名.gotoAndPlay("フレームラベル"); で移動しますが、 リンケージ設定したムービークリップの場合はインスタンス名の代わりに リンケージ名で呼び出せないのですか。

    • ベストアンサー
    • Flash
  • 【AS3】ムービークリップからステージへアクセスできません

    はじめまして。FlashでAction Script3.0を勉強し始めたばかりの初心者です。 実は、AS3でどうしても不明な部分があり この度問い合わせさせていただいております。 AS2では_rootでステージにあるムービークリップにアクセスできたかと思うのですがAS3では代わりのものはあるのでしょうか。 現在ステージ上にいくつかムービークリップを置いて、 それぞれのムービークリップ最後のタイムラインに、 「root.gotoandPlay("scene1")」というように記述して、 ステージにもどり、そのフレーム名から始めたいのですが(この場合、scene1というステージ上のフレームから再生させたい) 「未定義である可能性のgotoAndPlayメソッドを静的型flash.display:DisplayObjectContainerの参照を使用して呼び出しました」というエラーになってしまいます。 外部クラスなどは使用しておらず、 ライブラリに格納してあるムービークリップをステージに配置し、 初めのムービークリップを再生したら、次のムービークリップを再生、、というふうに順々に表示させていきたいのですが・・ アドバイスをいただけると大変助かります!! よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • addChildで描画した絵(シンボル:ムービークリップ)を消したい。

    addChildで描画した絵(シンボル:ムービークリップ)を消したい。 お世話になります。 adobe Flash pro ActionScript 3.0 で作成しております。 左クリックを押したら、 var mc:pen=new pen; addChild(mc); mc.x=mouseX; mc.y=mouseY; でpenというムービークリップを表示させるようにしております。 そこで、作成したmcを消す方法はどのようにしたらよいでしょうか? (1)直前に書いたmcを削除する方法 (2)今までに書いた全てのmcを削除する で教えて頂ければと思いますのでよろしくお願いします。

    • ベストアンサー
    • Flash
  • AS3:ステージリサイズするとムービークリップをすべて削除して何秒か後

    AS3:ステージリサイズするとムービークリップをすべて削除して何秒か後にまた、ムービークリップを設置。 ステージ横一杯にムービークリップ(以下MC)を縦2列で並べてステージをリサイズするたび、 MCをすべて削除してまた横一杯にMCを2列で並べるというものを作成中なのですが、リサイズの仕方によってはMCが何個か残ってしまいMCを再配置できないという現象がおきます。 以下のようにコーディングしているのですがどこが問題なのでしょう? 環境:AS3、Flash CS4、MC:W:80xH:100 Set(); stage.align=StageAlign.TOP_LEFT; stage.scaleMode=StageScaleMode.NO_SCALE; stage.addEventListener(Event.RESIZE,AddMC); function AddMC(eventObject:Event):void { var delate:uint=mc.numChildren; for (var k:uint=0; k<delate; k++) { mc.removeChildAt(k); } if (delate<=0) { var SetTimer:Timer=new Timer(500,1); SetTimer.addEventListener(TimerEvent.TIMER,ReAdd); SetTimer.start(); function ReAdd(eventObject:TimerEvent):void { Set(); } } } // function Set():void { var yoko:uint=Math.ceil(stage.stageWidth/80); for (var i:uint=0; i<yoko; i++) { for (var j:uint=0; j<2; j++) { var BX:MovieClip=new box(); mc.addChild(BX); BX.x=40+80*i; BX.y=50+100*j; } } } よろしくお願いします。

    • ベストアンサー
    • Flash
  • ムービークリップとインスタンス

    「ライブラリ内にあるのがムービークリップで、それをステージに配置したものがインスタンスである。」このように理解しているのですが、これは間違いでしょうか? 1、「MCを一つ作成し、それをステージ上に3カ所に配置し、各"MC"に01、02,03とインスタンス名を付けた。」 2、「MCを一つ作成し、それをステージ上に3カ所に配置し、各"インスタンス"に01、02,03とインスタンス名を付けた。」 上記の場合どちらが正しいのでしょうか? ムービークリップとインスタンスについてご教授ください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ムービークリップ内のムービークリップ制御について

    誠に不勉強の段お許しください。 Flashでサイトを製作しているのですが、どうしても分からず投稿させていただきました。 仮に -rootにボタンとAムービークリップ配置しました。 また、Aムービークリップ内の10フレー目にBムービークリップを配置し、Bムービークリップ内にボタンを配置しています。 _rootのボタンからAムービークリップを制御して10フレーム目のBムービークリップを表示はできるのですが、-root上でAムービークリップのBムービークリップ内のボタンでBムービークリップを制御するのにはどうすればよろしいのでしょうか。 なにとぞご教授いただけましたら幸に存じます。

  • クリックするたびにテキストを1個ずつ表示させる

    マウスクリックをしてテキストを1個ずつ表示させたいです。 stage.addEventListener(MouseEvent.CLICK, mc); function mc(event:MouseEvent):void{ var text1 : TextField = new TextField(); text1.text = "Hello World"; this.addChild(text1); } を実行すると、クリックするたびテキストが1つずつ増えていきます。 これを前回のを消去して新たに表示というような形で1つずつ表示させることはできないでしょうか?

    • ベストアンサー
    • Flash