私は何年も Actionscript に触れていませんでしたが、これは私の心を吹き飛ばします...しかし、それはかなり簡単なはずです。
わかりました、簡単なテスト シナリオを作成しました。ライブラリに「mcTest」という名前のムービークリップがあります。これは、フレーム 1 (唯一のフレーム) に次のアクション スクリプトを含む単純な正方形です。
var test = false;
function setTest() {
test = true;
trace(test);
}
this.addEventListener(MouseEvent.CLICK, click_handler);
function click_handler(e:MouseEvent) {
trace(test);
}
ステージ (フレーム 1、これも唯一のフレーム) には、次のコードがあります。
var objTest:MovieClip = new mcTest();
objTest.setTest();
addChild(objTest);
プロジェクトが実行されると、コンソールに予想される「True」が表示されます。MovieClip をクリックすると、予期しない "False" が表示されます。あたかも変数がリセットされたかのように。どうしたの?「objTest.setTest();」を削除すると メインステージから「setTest();」という行を追加するだけです MovieClip 自体の内部では、MovieClip をクリックすると、期待される "True" が返されます。
ところで、すぐに適切に型付けされた変数と関数を使用したクラスベースのアプローチに移りますが、今のところ、私が知っていることに固執します;)
更新:
奇妙なことに、mcTest 内の最初の行を次のように変更すると、次のようになります。
var test;
またはこのように:
var test:Boolean;
コードは期待どおりに機能します。変数を初期化するべきではないようです(そして、よく書かれたコードでは、もちろんその目的のためにコンストラクターを使用します)
それでも、理由はわかりません。私の記憶が正しければ、初期設定は古いバージョンの Flash/Actionscript で動作するはずです。
私の理解のために。誰かが何が起こっているのか知っているなら、私を更新してください。