質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Animate CC

Animate CC(旧Flash Professional)は、アドビシステムズ社のWebアニメーション制作ツールです。描いたグラフィックにタイムラインで動きを付け、スクリプトでインタラクティブな操作を実装。動画や映像作品、インタラクティブコンテンツ、データの可視化に利用できます。

ActionScript

ActionScriptはRIA、モバイルアプリケーション、Webアプリケーションなど広く使われているスクリプト言語です。スクリプトとして、AdobeFlashやAdobeFlexで記述されています。

Flash

Flashは、Webページにアニメーション、ビデオ、また対話型のアプリケーションを埋め込むためにAdobe社が提供しているクロスプラットフォームのインターネットマルチメディアランタイムです。

ActionScript 3

ActionScript 3 (AS3)はAdobe FrashとAIRプラットフォームによる、オープンソースかつオブジェクト指向のプログラミング言語です。AS3はRIA、モバイルアプリケーション、デスクトップアプリケーションなど広く使われます。

Q&A

1回答

1512閲覧

removeChild(e.currentTarget)はできないのでしょうか?

KR_mm

総合スコア0

Animate CC

Animate CC(旧Flash Professional)は、アドビシステムズ社のWebアニメーション制作ツールです。描いたグラフィックにタイムラインで動きを付け、スクリプトでインタラクティブな操作を実装。動画や映像作品、インタラクティブコンテンツ、データの可視化に利用できます。

ActionScript

ActionScriptはRIA、モバイルアプリケーション、Webアプリケーションなど広く使われているスクリプト言語です。スクリプトとして、AdobeFlashやAdobeFlexで記述されています。

Flash

Flashは、Webページにアニメーション、ビデオ、また対話型のアプリケーションを埋め込むためにAdobe社が提供しているクロスプラットフォームのインターネットマルチメディアランタイムです。

ActionScript 3

ActionScript 3 (AS3)はAdobe FrashとAIRプラットフォームによる、オープンソースかつオブジェクト指向のプログラミング言語です。AS3はRIA、モバイルアプリケーション、デスクトップアプリケーションなど広く使われます。

0グッド

0クリップ

投稿2020/07/15 05:15

編集2020/07/15 11:05

ActionScript初心者です。
調べてもどうしてもわからない箇所があったため、ご教授いただきたいです。

###やりたいこと
一つのインスタンスを複製して、クリックでインスタンスが削除されるイベントを、複製したインスタンス全てに追加する。
インスタンスにイベントを追加することまではできたが、削除ができない。

問題点

e.currentTargetでイベントの対象になっているインスタンスを取得できることは理解したのですが、removeChildができません。

なぜremoveChild(e.currentTarget)できないのでしょうか?

該当のソースコード

ActionScript

1import flash.utils.getDefinitionByName; 2 3for (var i:int = 0; i<3; i++) { 4var myClass:Class=Class(getDefinitionByName("mc")); 5var myInstance:MovieClip = new myClass(); 6addChild(myInstance); 7 8myInstance.name ="a"+i 9 10myInstance.addEventListener(MouseEvent.CLICK,removeInstance) 11 12} 13 14function removeInstance(e:Event) { 15 removeChild(e.currentTarget); 16}

###エラーメッセージ

静的型 Object の値が、関連しない可能性が高い型 flash.display:DisplayObject に暗黙で型変換されています。

こちらのリンクを参考にコードを書きました。
https://mixi.jp/view_bbs.pl?comm_id=21394&id=47811993

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

このコードがうまくいかないポイントは、2つあります。

(1)myInstanceと名前("a"+i)が関連づけられていない。
(2)removeChildで指定できるのは、ディスプレイオブジェクト型なのに、e.currentTargetで取得したオブジェクト型を指定してしまっている。

です。
エラーメッセージは、(2)を警告しています。
下のコードなら、おそらくうまくいくと思います。

import flash.utils.getDefinitionByName; for (var i: int = 0; i < 3; i++) { var myClass: Class = Class(getDefinitionByName("mc")); var myInstance: MovieClip = new myClass(); addChild(myInstance); myInstance.name = "a" + i; this["a" + i] = myInstance; //(1)を解決しています。 myInstance.x = myInstance.width + (myInstance.width + 10) * i; //mcが重なって表示されるとわかりづらいので、 //横並びに配置されるようにx座標を適当に指定しています。 myInstance.addEventListener(MouseEvent.CLICK, removeInstance) } function removeInstance(e: Event) { removeChild(this[e.currentTarget.name]); //(2)を解決しています。 }

(1)について
これは、はまりがちなパターンです。
なぜそうなるのか私もよくわかってないのですが、myInstance.name = "a" + i では、myInstance の名前を指定しましたが、「"a" + i」が「myInstance」であることは指定できていません。
そのため、this["a" + i] = myInstance の1文によって、「"a" + i」が「myInstance」であることを指定します。
もし、この1文がないと、

TypeError: Error #2007: パラメーター child は null 以外でなければなりません。

というエラーが出ます。
removeChildで指定したムービークリップがnull(存在しない)という警告文です。
詳しい方なら、どういう理屈でこうなるのかご存知かもしれませんが、私は素人なので、「名前を指定したあと、その名前にインスタンスを入れ直す」ということを呪文として覚えています。

(2)について
こちらも、型を理解してないとハマりがちかもしれません。
イベントリスナーで取得できるのは、オブジェクト型です。
しかし、removeChildでは、消去したいディスプレイオブジェクトを指定しないといけません。
ですので、イベントリスナーで取得したオブジェクトを利用して、ディスプレイオブジェクトに仕立て上げることをします。
「e.currentTarget」で得たオブジェクトは、いろんな情報の集まりと思ってください。
イベントが起こったムービークリップの名前やx座標、y座標など、いろんな情報を1つにまとめたものです。
ですので、「e.currentTarget」の後に「.name」をつけることで、イベントが起こったムービークリップの名前を取り出します。
この名前は文字列ですので、[]で括ることで、ムービークリップとしてアクセスしています。

投稿2020/07/30 09:12

編集2020/07/30 09:40
moory

総合スコア146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問