アプリ版:「スタンプのみでお礼する」機能のリリースについて

Actionscript3.0
Adobe Flash Professional CS5

いつもお世話になっております。
独学でActionscript3.0を触っています。
基本的なことですが、調べても思っている答えが出てこないので質問させてください。

for文やシーンのジャンプなどによって、いわゆるループ処理をするたびに、「var」で生成されている変数やインスタンスはどんどん増えていくものなのでしょうか。

たとえば今私が作っているものですが
シーン2にムービークリップ「botan1」~「botan4」があります。
どれかをクリックしたら、シーン3ないし4に飛びます。行き先はランダムで決めています。
そしてシーン3・4にある「戻る」ボタンをクリックしたらシーン2に戻ってくる仕組みです。

実際に実行した場合、シーン2に

var Flag:int;
var botan1:MovieClip=new MovieClip();
botan1.addEventListener(MouseEvent.CLICK,botan1Push)
function botan1Push(e:MouseEvent){
gotoAndPlay(3);//実際はランダムに飛ぶ
trace("ボタン1が押されました");
}
//以下略

と書いてあったとして、初回実行時にFlagやムービークリップが生成され、またイベントリスナも生成されますよね。
そしてbotan1をクリック→シーン3に飛ぶ→シーン2に戻ってきたときに
新たにFlagやMC、イベントリスナは作成されたりするのでしょうか。
それとも、上書きでもされるのでしょうか。
変数やムービークリップだけでなく、「var urlReq:URLRequest=new URLRequest("URL");」などのURLリクエストやローダーについても気になります…。

AS3について調べていると、メモリ開放…とか、要らなくなったリスナはremove…とか書いてあるので、
もしシーンに戻るたびに生成されているならば、40回くらいループする上実際は上記よりももっと沢山生成するので、その容量たるや…?といった感じです。

本当に初歩的な質問で恐縮なのですが、どなたかご教授ください。。
(PrivateやPublicの違いすら分かっていません…)

A 回答 (1件)

ActionScriptは一応、Javaの流れをくむオブジェクト指向言語ですので、不要になったオブジェクトや変数を明示的に開放する必要はありません。


システムが適当なタイミングでガベージコレクションをやってくれます。

ただし、AS3では、イベントリスナは、その対象になっているオブジェクトが消滅しても残り続けるので、明示的にremoveEventListenerで開放しなければいけません。
この仕様はバグっぽい面もあるので、のちのFlashPlayerでは改善されると思いますが。
    • good
    • 0
この回答へのお礼

shockatz様
ご回答ありがとうございます!

なるほど、ではイベントリスナのみ気にしておれば良いのですね。
イベントリスナ(マウスクリック)からのfunction内に、trace("ほにゃらら");を記入していると、ループ回数が増えるにつれて、出力される「ほにゃらら」の行数も増えていってしまい困っておりました。
シーン3ないし4に移るたびにイベントリスナをremoveするようにすると、問題は解決しました。

ボタン以外にもaddしっぱなしのイベントリスナがたくさんあるので、ちゃんと処理を記述していこうと思います。

わかりやすく解説してくださり、本当にありがとうございました!
おかげさまで助かりました。
しかしバグ…みたいなものなのですね。早く改善していただきたいです^-^;

お礼日時:2012/10/17 16:22

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