マンガでよめる痔のこと・薬のこと

現在AS3.0で開発を行っています。
AS3.0は初心者です。

テキストツールを使用し、ステージ上に描画したダイナミックテキストの変数はどのように指定すればいいのでしょうか?

AS2.0ではプロパティタブに「変数」の記述欄があり、そこに記述していたのですが、AS3.0は記述できなくなっていて悩んでいます。

ご教授頂けると幸いです。
よろしくお願い致します。

A 回答 (2件)

AS3.0でもそのダイナミックテキストをクリックすると


プロパティーにダイナミックテキスト、静止テキストなどを
偉ぶ欄の下に変数をいれるフィールドがあると思います。
そこにいれてあげると大丈夫です。


testTextと記述、スクリプトで
testText.text = "テストです。";
と記述すればできると思います。
    • good
    • 0
この回答へのお礼

返信遅くなってしまいすいません。

AS3.0はインスタンス名と変数名が同じなんですね。
勉強になりました。

ありがとうございました。

お礼日時:2008/11/17 09:17

text プロパティを使います。



例) テキストフィールドへ値を設定する場合

 テキストフィールド.text = 文字列;
 テキストフィールド.text = String(数値);

参考URL:http://livedocs.adobe.com/flash/9.0_jp/ActionScr …
    • good
    • 0
この回答へのお礼

返信遅くなってしまいすいませんでした。

Tanigucchi様いつもご回答ありがとうございます。
また、参考URLもありがとうございます。
おかげで開発がうまく進行できそうです。

機会がありましたら、再度よろしくお願い致します。

お礼日時:2008/11/17 09:21

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

このQ&Aを見た人が検索しているワード

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

Qダイナミックテキストに読み込んだテキストを改行させるにはどうすればよいのでしょうか?

Windows XP SP2
FLASH MX 2004を使用しております。

ダイナミックテキストのインスタンス名をmessage_txtとして

this.message_txt.text = "数字を入力してからボタンを押す。";

とスクリプトを書くと横幅が足らない場合、勝手に改行されます。
自分で任意で改行させて下記のように表示させるにはどうすればよいのでしょうか?

<このように表示させたい>
数字を入力してから
ボタンを押す。

<現状>
数字を入力してからボタ
ンを押す。

Aベストアンサー

書かれているサンプルの場合,

this.message_txt.text = "数字を入力してから" + newline + "ボタンを押す。";

でうまく行くといます。newlineがキャリッジリターン(改行コード)です。
こちらは良い参考URLが見つかりませんでした。ヘルプあたりには少し書いてあります。

また,外部テキストの1行テキストデータに改行を入れる場合,外部テキストデータは,

message_txt=数字を入力してから%0Dボタンを押す。

とします。
こちらの参考URLは
http://www.macromedia.com/jp/support/flash/ts/documents/fl0159.html
http://hima.chu.jp/flash/tips/shiftjis.htm
です。

参考URL:http://www.macromedia.com/jp/support/flash/ts/documents/fl0159.html,http://hima.chu.jp/flash/tips/shiftjis.htm

書かれているサンプルの場合,

this.message_txt.text = "数字を入力してから" + newline + "ボタンを押す。";

でうまく行くといます。newlineがキャリッジリターン(改行コード)です。
こちらは良い参考URLが見つかりませんでした。ヘルプあたりには少し書いてあります。

また,外部テキストの1行テキストデータに改行を入れる場合,外部テキストデータは,

message_txt=数字を入力してから%0Dボタンを押す。

とします。
こちらの参考URLは
http://www.macromedia.com/jp/support/flas...続きを読む

QAS3の変数宣言で、変数名+00や01など変更しながら使いたい

ActionScript3.0でnew演算子などで
変数(例えばobj)などを宣言する際に
ある条件ならobj00、またある条件ならobj01
など条件に合わせて最後の2文字を変更したいです。
bnという変数に条件に従って00や01を代入して
以下のように作りましたがうまくいかないです。
▼00の場合
var bn:String = "00";
var "obj"+bn: Loader = new Loader();
分かる方は教えて下さい。宜しくお願いします。

Aベストアンサー

#1 です。

> ReferenceError: Error #1056: Upload のプロパティ obj00 を作成できません。
> と表示されてしまいます。


例えばファイルの構造を次のようにして,

 任意のフォルダ
    ├名称未設定-1.fla (ファイル名は何でも良いです)
    └00.jpg

「名称未設定-1.fla」 のフレーム1
------------------------------------
var bn:String="00";
this["obj"+bn] = new Loader();

this["obj"+bn].load(new URLRequest(bn+".jpg"));

addChild(this["obj"+bn]);
------------------------------------

そして 「制御」→「ムービープレビュー」。

何のエラーもなくパブリッシュ&動作検証できますよ。


クラスファイルの中とか,
書く場所などの条件が関係するのではないでしょうか。
「this」 は場合によって変わります。

#1 です。

> ReferenceError: Error #1056: Upload のプロパティ obj00 を作成できません。
> と表示されてしまいます。


例えばファイルの構造を次のようにして,

 任意のフォルダ
    ├名称未設定-1.fla (ファイル名は何でも良いです)
    └00.jpg

「名称未設定-1.fla」 のフレーム1
------------------------------------
var bn:String="00";
this["obj"+bn] = new Loader();

this["obj"+bn].load(new URLRequest(bn+".jpg"));

addChild(this["obj"+bn]);
-------------...続きを読む

QgotoAndPlayで反応がありません。

 ムービークリップ内のボタン(ボタンは複数存在しています)[プルダウンメニューを作成しました]に対して、
on (release) {
gotoAndPlay("フレーム番号");
}
と記述し、フレーム移動をさせようとしたのですが、
反応がありません。
Flashを使い始めてまだ間もなく、アクションスクリプトも初心者です。
フレームアクションは、キーフレームに設定しないといけないと参考書に書いてあったのですが、そうするとムービークリップ内のボタンには、gotoAndPlayの使用はまちがっているのでしょうか?

フレームアクションではないのですが、同じ部分に
on (release) {
getURL("**.html");
}
と記述すると問題がなく動きます。

過去の質問も読んでみたのですが、どの質問が自分の疑問に当てはまるかよくわかりません。
どなたかご教授願います。

以上の文章で理解しにくければ、追記致します。

Aベストアンサー

いくつか原因が考えられますが、1番怪しいのは移動先の指定の仕方です。
gotoAndPlay または gotoAndStop で、移動先をフレームの番号で指定する時は、

 gotoAndPlay( 2 );

このように、数字を " " でくくらずに記述します。
" " でくくってもエラーにならないのはなぜかと言いますと。

 gotoAndPlay( "menu_item1" );

このように指定すると、”menu_item1”というフレームラベルを持つフレームに移動、という意味になります。
つまり、" "でくくっても文法上は誤りではないのでエラーにはならないのですが、「 2 」というフレームラベルを持つフレームがない時はフレームの移動が正常に行われません。

Flash MX か MX 2004 をお使いの場合は、フレームを選択した状態で、「プロパティ」パネルを見てください。
左上の方に、<フレームラベル>と書かれている項目があるかと思います。
ここで何か名前を入力すると、選択したフレームに名前が付きます。この名前のことを”フレームラベル”といいます。

フレームラベルは gotoAndPlay や gotoAndStop の移動先として利用できます。
例えばゲームを作っていて、フレーム2からゲームが始まるとします。
フレーム2に”game_start”というフレームラベルを付けると、

 gotoAndPlay( 2 );



 gotoAndPlay( "game_start" );

は、同じ意味になります。
フレームを追加したなどの理由でゲームの始まりがフレーム2からではなくなった場合、フレーム番号を直接指定していた場合は、番号を書き直さなければなりません。
しかし、フレームラベルで指定していれば、フレームが移動しても、そのフレームとともにラベルも移動するので、スクリプトを直さなくても済みます。


もう1つの原因として考えられるのは、ボタンをムービークリップとして作っている場合です。
Flash MX からは、ムービークリップをボタンと同じように使えるようになりました。
が、ボタンとして使っているムービークリップに

 on(release)
 {
  gotoAndPlay( 2 );
 }

というアクションを書くと、ボタン用のムービークリップのフレーム2に移動する、という意味になります。
「プロパティ」パネルで、タイプを確認してみてください。左上の方にリストがありますが、ここが「ボタン」ではなく「ムービークリップ」になっている場合は、

 on(release)
 {
  _parent.gotoAndPlay( 2 );
 }

というように、gotoAndPlay の前に”_parent.”という記述が必要です。


ActionScript を設定できる場所は、

 ・タイムラインのフレーム(キーフレームが必要)
 ・ボタンのインスタンス
 ・ムービークリップのインスタンス

この3箇所です。
フレームに設定するアクションを”フレームアクション”、ボタンやムービークリップのインスタンスに設定するアクションを”オブジェクトアクション”といいます。
gotoAndPlay はフレームを移動するアクションですが、だからといって”フレームアクション”というのではありません。ボタンやムービークリップにも設定できます。

いくつか原因が考えられますが、1番怪しいのは移動先の指定の仕方です。
gotoAndPlay または gotoAndStop で、移動先をフレームの番号で指定する時は、

 gotoAndPlay( 2 );

このように、数字を " " でくくらずに記述します。
" " でくくってもエラーにならないのはなぜかと言いますと。

 gotoAndPlay( "menu_item1" );

このように指定すると、”menu_item1”というフレームラベルを持つフレームに移動、という意味になります。
つまり、" "でくくっても文法上は誤りではないのでエラーにはならな...続きを読む

Q拡張子「swf」の再生方法について

○○○.swfというファイルをもらったのですが、再生できません。

ネットで調べてみると、Adobe Flash Playerで再生できるとあったので、インストールしてみたのですが、パソコン内にAdobe Flash Playerが見つかりません。(インストール完了の表示は出ました。)

パソコンで再生できなかったので、スマホでSWFプレーヤーをインストールしてみたのですが、再生できませんでした。

パソコン・スマホどちらでもいいのでswfファイルを再生できる方法を教えてください。

Aベストアンサー

Adobe Flash Playerは極端に言うと「再生するための設定」なので、インストールしたからと言ってそこらにあるFLVやSWFは再生はできないのです。
SWF対応のソフトでは、簡単で確実そうなのはGOM PLAYERだと思います。
http://www.gomplayer.jp/

Qテキストフィールドを半透明にするには

FLASH 8で、
インスタンス名「mc」のムービークリップに
テキストフィールドと適当な図形を絵画し、
ステージに貼り付け、フレームアクションに
  _root.mc._alpha = 50;
を追加したところ、絵画した図形は半透明になりますが、
テキストフィールドの文字は半透明になりません。
両方とも同じように半透明にしたいのですが、どうすればいいでしょうか。

よろしくお願いします。

Aベストアンサー

テキストを選択し、「プロパティ」パネルで設定を確認してください。

 ・デバイスフォント(名前が” _ ”で始まるフォント)を使っている
 ・タイプが「ダイナミックテキスト」もしくは「テキスト入力」になっている

この、どちらかに該当していませんでしょうか?
どちらか一方にでも該当する場合、テキストに対するアルファの操作が無効になります。
ちなみに、回転やマスクレイヤーを使ったマスクも機能せず、テキストが表示されなくなります。

心当たりがありましたら、「プロパティ」パネルの左上の方にあるリストから「静止テキスト」を、その右隣のリストから、名前が” _ ”で始まるフォント以外のフォントを選択してみてください。


テキストフィールドのタイプを「静止テキスト」にしたテキストは、swf ファイルに書き出す際に描画ツールで描いたようなパスに分解され、文字ではなく絵として記録されます。
そのため、再生する側のパソコンに同じフォントが入っていなくても意図した通りのデザインで表示されます。

” _ ”で始まる名前のフォントを、デバイスフォントといいます。
デバイスフォントを使った静止テキストは分解されず、文字として記録されます。
これはこれで利点もあるのですが、デバイスフォントを使うと回転・アルファ・マスクレイヤーを使ったマスクが機能しなくなります。

テキストのアルファ・回転・マスクが上手くいかないという相談を、このサイトでも時おり見かけるのですが。
よくある原因は、デバイスフォントを選択していることです。
フォントのリストに最初に表示されるのがデバイスフォントであるためか、どうも、デバイスフォントをうっかり選んでしまって失敗する方が多いようです。


フォントのリストの右下の方に、フォントのレンダリング方法を決めるリストがあります。
この中から「デバイスフォントの使用」を選んだ時も、” _ ”で始まるフォントを選んだ時と同様の扱いになります。
回転・アルファ・マスクレイヤーを利用する作品では、これ以外のレンダリング方法を選択してください。

------------------------------------------------------------------

先ほど、テキストフィールドのタイプの話をしましたが。
テキストフィールドのタイプを決めるリストで「ダイナミックテキスト」か「テキスト入力」を選んだ時は、デバイスフォントを使用していなくても回転・アルファ・マスクレイヤーによるマスキングは無効になります。

マスクについては、Flash Player 6 からはムービークリップの setMask という機能を使うことで「ダイナミックテキスト」「テキスト入力」を選んだ時もマスクが利用できるようになりました。
(ただし、一部制限が付きます)

「ダイナミックテキスト」「テキスト入力」でアルファを利用するには、

 1)テキストのアウトラインを埋め込む
 2) ColorMatrixFilter でアルファの変換をかける

といった方法があります。


1) は古いバージョンの Flash Player でパブリッシュする場合も使える方法です。
ただし、フォントファイルに含まれる字を絵として記録するということですので、埋め込む字数が多いと swf ファイルの容量が大きくなります。
和文フォントはパスが複雑な上に字数が多く、日本語1セット分を埋め込むと2メガ3メガは当たり前の大容量になりますから、日本語を利用する時には不向きです。

なお、必要な文字だけを埋め込むこともできます。
埋め込む文字は、「プロパティ」パネルで「埋め込み...」ボタンを押すとパネルが開き、設定することができます。
フォントのレンダリングが「デバイスフォントの使用」になっている時はこのボタンは無効になっていますので、これ以外のレンダリング方法を指定してください。


2) は Flash Player 8(作成ツールは Flash 8 )でできるようになったワザです。
ダイナミックテキストだろうがデバイスフォントだろうがアルファを有効にするスグレモノではありますが、欠点もいくつかあります。

まず、文字をなめらかに表示する処理(アンチエイリアス)が行われないため、ドットが目立って汚くなります。
(フォントを埋め込んだ場合は、設定されているレンダリング方法に従ってアンチエイリアス処理が行われます)
また、ムービークリップが極端に大きかったり(縦または横のサイズが 2880 ピクセルを超えるものは不可)、メモリが不足していて作業領域を確保できない場合はフィルタの処理が無効になりますし、処理も少々重くなります。


仮に、ステージにムービークリップ” mc ”があるとします。
このムービークリップのアルファを 50 %にするスクリプトは、次のように書くこともできます。
ムービークリップにダイナミックテキストやテキスト入力のテキスト、およびデバイスフォントを使ったテキストが含まれていても、テキストごと半透明になります。

このスクリプトはメインのタイムラインに設定してください。

(↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)


 import flash.filters.*;

 //アルファの変換行列を作成
 alpha_ratio = 50 / 100;
 trans_mtx = new Array();
 trans_mtx =
 [
  1 , 0 , 0 , 0 , 0 ,
  0 , 1 , 0 , 0 , 0 ,
  0 , 0 , 1 , 0 , 0 ,
  0 , 0 , 0 , alpha_ratio , 0
 ];

 //カラー調整フィルタを作成
 color_mtx = new ColorMatrixFilter( trans_mtx );

 //ムービークリップにフィルタを適用
 effect = new Array();
 effect.push( color_mtx );
 _root.mc.filters = effect;


変数 alpha_ratio の

 alpha_ratio = 50 / 100;

↑この 50 の部分が、いわゆる_ alpha プロパティを操作する時のアルファ値に相当します。
ColorMatrixFilter ではアルファは%ではなく割合で計算しますので、0.0 ~ 1.0 までの間で指定します。

_alpha プロパティを操作しますと、効果が重ねがけになります。
例えば _root.mc._alpha = 50; を実行した後で ColorMatrixFilter でアルファを更に操作した場合は、50 %の更に 50 %、つまり、オリジナルの 25 %の透明度になります。

ヘルプの「 ActionScript 2.0 リファレンスガイド」で ColorMatrixFilter の項目を見ていただくと分かりますけれど、内部では多数の乗算を含む非常に複雑な計算をしていますから、処理は重くなります。


デバイスフォントや静止テキスト以外のアルファの操作は、この通り、一応は抜け道があるものの、いずれも、ファイルの容量や処理が重くなるなどのリスクがつきまといます。
テキストを半透明にしたい場合は、やむをえない事情が特にないのでしたら、素直に静止テキストにしてデバイスフォント以外のフォントに設定することをオススメします。

テキストを選択し、「プロパティ」パネルで設定を確認してください。

 ・デバイスフォント(名前が” _ ”で始まるフォント)を使っている
 ・タイプが「ダイナミックテキスト」もしくは「テキスト入力」になっている

この、どちらかに該当していませんでしょうか?
どちらか一方にでも該当する場合、テキストに対するアルファの操作が無効になります。
ちなみに、回転やマスクレイヤーを使ったマスクも機能せず、テキストが表示されなくなります。

心当たりがありましたら、「プロパティ」パネルの左...続きを読む

QTextFieldで、文字の大きさや色を変えたいAC3・Flash

ActionScript3.0で、
TextFieldに表示される文字の大きさや色を変えたいです。
現在、下記のように記載して、文字を表示させていますが、
いくらネットや本で調べても、文字の大きさを変える方法が分かりませんでした。数時間以上調べました。

ぜひ教えてください!

var n:int=5;
var abc = new TextField();
stage.addChild(abc);

abc.border = false;
abc.x = 100;
abc.y = 60;
abc.width = 50;
abc.height = 50;

abc.htmlText =n;

たとえばこの場合5という数字が大きく表示されるようにしたいです。

よろしくお願いいたします!

Aベストアンサー

var n:int=5;
var abc = new TextField();
//ここからが追加
var format:TextFormat = new TextFormat();
format.size = 50;//フォントサイズを50に
abc.defaultTextFormat = format;
//ここまでが追加
stage.addChild(abc);
abc.border = false;
abc.x = 100
abc.y = 60;
abc.width = 50;
abc.height = 50;
abc.htmlText =n;


ヘルプのTextFormatを参照するとより詳しい説明があります。

Q#1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。

ただ今、下のようなflashを制作しています。
http://www.shoji-yuki.com/index.fla

ボタンをクリックすることで、ラベル『nwes』にフレームが移動するようにしたいのですが、

actionレイヤーの1フレーム目に
===
function go_news(btn1event){
this.gotoAndPlay("news");
}
news_btn.addEventListener(MouseEvent.CLICK,go_news);
===

また、45フレーム目に
===
this.stop();
===

と入力をしたのですが、

出力から
「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
at index_fla::MainTimeline/frame1()

と、メッセージがでてしまいます。



ネットで調べた所、インスタントが配置されていないのが問題とのことですが、イマイチ良くわかりません。ステージにシンボルを配置しているので、インスタントとして配置していると思います。


どなたか、良き解決方法をご教授ください。

===
flash cs4
action script 4.0

ただ今、下のようなflashを制作しています。
http://www.shoji-yuki.com/index.fla

ボタンをクリックすることで、ラベル『nwes』にフレームが移動するようにしたいのですが、

actionレイヤーの1フレーム目に
===
function go_news(btn1event){
this.gotoAndPlay("news");
}
news_btn.addEventListener(MouseEvent.CLICK,go_news);
===

また、45フレーム目に
===
this.stop();
===

と入力をしたのですが、

出力から
「TypeError: Error #1009: null のオブジェクト参照のプ...続きを読む

Aベストアンサー

そのnews_btnってインスタンス
1フレームじゃなく
途中のフレームに登場する
とかじゃないですか?

ムービークリップの途中のから登場するインスタンスは
そのフレームが再生されるまでアクセスできません

それもgotoAndStop()した直後でもだめです

フレームが再生され内容がステージに追加されて
初めてアクセスが可能になります

ので、1フレーム目の見えない所にインスタンスを置いておくとか
なんらかの対処が必要になってきます

QError#1009 時計のシーン移動ボタン

こんにちは、Flash初心者です。
アクションスクリプト3.0にて、時計を作っています。

時計は完成したものの、シーンを移動するボタンを作成したところ、

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at sushi_fla::MainTimeline/updateDate2()[sushi_fla.MainTimeline::frame4:13]

このようなエラーメッセージが出てきました。



■1フレーム目■
1フレーム目のプログラムにTOPに戻るボタンのプログラムを記載しています。
top2nd_btn.addEventListener(MouseEvent.CLICK, fl_top22);

function fl_top22(event:MouseEvent):void
{
gotoAndPlay(1,"TOP");
}

■2フレーム目■
プログラムソースは、下記の通りで、2フレーム目に記載しております。

//時計のプログラム
addEventListener(Event.ENTER_FRAME, updateDate2);
function updateDate2(event:Event):void
{
//Dateクラスの設定
var dateObj = new Date();
//時間
tanshin2_mc.rotation = dateObj.hours*360/12 + dateObj.minutes*360/12/60;
//分
choshin2_mc.rotation = dateObj.minutes*360/60 + dateObj.seconds*360/60/60;
//秒
secondhand2_mc.rotation = dateObj.seconds*360/60 + dateObj.milliseconds*360/60/1000;

}
//この画面でストップ
stop();


このソースでタイムラインの秒針Byoshin・長針Choshin・短針Tanshinの3つを動かしております。
(Bisuやバックグランドは飾りです)



アドビヘルプだと、Null にプロパティがないそうですが、時計は、永遠に回り続けるため、一つのフレームでアクションが完結することがありません。
その為、フレームを変えてもうまく行きませんでした。

初心者でどこが駄目なのかわからず、泣きそうです。
お分かりになる方がおりましたら、お知らせくださいませ。
どうぞ、よろしくお願いいたします。

こんにちは、Flash初心者です。
アクションスクリプト3.0にて、時計を作っています。

時計は完成したものの、シーンを移動するボタンを作成したところ、

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at sushi_fla::MainTimeline/updateDate2()[sushi_fla.MainTimeline::frame4:13]

このようなエラーメッセージが出てきました。



■1フレーム目■
1フレーム目のプログラムにTOPに戻るボタンのプログラムを記載しています。
top2nd_btn.addEventListener(MouseEven...続きを読む

Aベストアンサー

別の "TOP" シーン にジャンプした後も,
addEventListener(Event.ENTER_FRAME, updateDate2);
が有効になり続けるため
各針への参照が切れてしまうのが原因ではないかと思います。

フレーム1 のスクリプトを
次のように変更すると(1行付け加えると)
無事にパブリッシュできるような気がします。

top2nd_btn.addEventListener(MouseEvent.CLICK, fl_top22);

function fl_top22(event:MouseEvent):void
{
//1フレーム進む時間ごとに毎回
//updateDate2 を実行させるのを取り消す↓
removeEventListener(Event.ENTER_FRAME, updateDate2);
gotoAndPlay(1,"TOP");
}

Qクリックしたインスタンスを削除する方法

windows版FlashCS6で、ActionScript3を使用しております。
どうぞ、よろしくお願いいたします。

最初に、前提をご説明します。

埋め込みアセットクラスBoxをライブラリに準備します。
Boxの中には、50px × 50pxのビットマップが、基準点を中央で配置してあります。

埋め込みアセットクラスWallをライブラリに準備します。
Wallの中には、550px×400pxのビットマップが、基準点を中央で配置してあります。

ステージサイズは550px×400pxです。

タイムラインに、下記のActionScript3を書きます。

var myWall:Wall = new Wall();
myWall.x = 275;
myWall.y = 200;
addChild(myWall);

var myBox:Array = new Array(10);
for(var i:int=0 ; i<10 ; i++){
myBox[i] = new Box();
myBox[i].x = Math.random() * 550;
myBox[i].y = Math.random() * 400;
addChild(myBox[i]);
}

パブリッシュすると、ステージ上にはmyWallのインスタンスが1個と、myBoxのインスタンスが10個配置されます。

myBoxのインスタンスいずれかをクリックすると、クリックされたmyBoxが削除される(クリックされたmyBoxをremoveChild()し、それの参照を保存していた変数にnullを代入する)ようにするには、どのようにスクリプトを組めば良いでしょうか?

背景のmyWallは、クリックされても削除されないようにしたいです。

ご教示のほど、どうぞ、よろしくお願いいたします。

windows版FlashCS6で、ActionScript3を使用しております。
どうぞ、よろしくお願いいたします。

最初に、前提をご説明します。

埋め込みアセットクラスBoxをライブラリに準備します。
Boxの中には、50px × 50pxのビットマップが、基準点を中央で配置してあります。

埋め込みアセットクラスWallをライブラリに準備します。
Wallの中には、550px×400pxのビットマップが、基準点を中央で配置してあります。

ステージサイズは550px×400pxです。

タイムラインに、下記のActionScript3を書きます。

var myWall:Wal...続きを読む

Aベストアンサー

スクリプトとしてはとりあえず
次のような感じ↓で良いのではないでしょうか。


//====================================
var myWall:Wall = new Wall();
myWall.x = 275;
myWall.y = 200;
addChild(myWall);

var myBox:Array = new Array(10);
for (var i:int=0; i<10; i++) {
myBox[i] = new Box();
myBox[i].x = Math.random() * 550;
myBox[i].y = Math.random() * 400;
addChild(myBox[i]);
//------↓以降を追加変更↓------
//(各Boxマウスオーバーでハンドカーソルにする(要る?))
myBox[i].buttonMode = true;
//各Boxクリック時に関数 removeBox を実行
myBox[i].addEventListener(MouseEvent.CLICK,removeBox);
}

//関数 removeBox の定義
function removeBox(e:MouseEvent):void {
//クリックされたターゲットをこの階層の表示リストから削除
removeChild(DisplayObject(e.currentTarget));
}
//====================================





上記スクリプトの最後の部分↓ですが

//クリックされたターゲットをこの階層の表示リストから削除
removeChild(DisplayObject(e.currentTarget));

以下ではこの行についてのみの説明を書きます。


この最後の行は
次↓のように変更してもかまいません。

removeChild(Box(e.currentTarget));

または
Box クラスが MovieClip クラスを継承している場合は
次↓のように変更してもかまいません。

removeChild(MovieClip(e.currentTarget));


もし removeChild(e.currentTarget); のように
引数を「e.currentTarget」だけにした場合,
その「e.currentTarget」は
単なる「Object」クラスのインスタンスとして認識されてしまうため
removeChild(=表示リストから削除する) という命令を使うことができなくなります。
(「Object」クラスのインスタンスには,例えば「配列」や「関数」や「音」など "表示されないオブジェクト" も含まれるため「表示リストから削除する」という命令が通用しない。)

したがって少なくとも
クリックされたターゲットを "表示オブジェクト(DisplayObject)" として認識させる必要があります。

そのために
DisplayObject(e.currentTarget) のように書いて
イベントターゲットを「DisplayObject」に変換しているわけです。

MovieClipクラスも,Boxクラスも,
少なくとも DisplayObjectクラス は継承しているはずですから,
Box(e.currentTarget) や MovieClip(e.currentTarget) などにしてもかまわないということになります。


もし Box クラスが MovieClip クラスを継承していれば
クラスの継承関係は次のようになります。

Object > EventDispatcher > DisplayObject > InteractiveObject > DisplayObjectContainer > Sprite > MovieClip > Box

これらクラスのうち
DisplayObject 以下のクラスとして認識させれば removeChild できるという意味です。
認識させるクラスは作者の都合で適当に決めれば良いです。


ちなみに,
Array(配列) クラスであれば継承関係は次のようになります。
Object > Array

Function(関数/メソッド) クラスであれば継承関係は次のようになります。
Object > Function

Sound(音) クラスであれば継承関係は次のようになります。
Object > EventDispatcher > Sound

これら3つはどれも DisplayObject を継承していませんよね?

したがって
これらはどれも元から表示リストに加える(addChild する)ことができないので
表示リストから削除する(removeChild する)こともできないわけです。
(他にも DisplayObject でないオブジェクトはたくさん存在します。)



または,
別の書き方として次のように変更しても良いでしょう。

removeChild(e.currentTarget as DisplayObject);

removeChild(e.currentTarget as Box);

removeChild(e.currentTarget as MovieClip);

この「as」は ActionScript の略(=AS)ではなく,
英語の前置詞である「as (…として)」が語源でしょうね。

【英文例】I looked up to him as an engineer.
【和訳文】私は技術者として彼を尊敬している。

【Script】removeChild(e.currentTarget as DisplayObject);
【和訳文】表示オブジェクトとしてのイベントターゲットを表示リストから削除

スクリプトとしてはとりあえず
次のような感じ↓で良いのではないでしょうか。


//====================================
var myWall:Wall = new Wall();
myWall.x = 275;
myWall.y = 200;
addChild(myWall);

var myBox:Array = new Array(10);
for (var i:int=0; i<10; i++) {
myBox[i] = new Box();
myBox[i].x = Math.random() * 550;
myBox[i].y = Math.random() * 400;
addChild(myBox[i]);
//------↓以降を追加変更↓------
//(各Boxマウスオーバーでハンドカーソルにする(要る?))
myBox[i].buttonMode = t...続きを読む


人気Q&Aランキング