勘違いのlocalToGlobal。
使わなくなったものは、消す。
そうすれば、多少なりともメモリが開放されるので、
処理が早くなる。
この考えは、出来る限り実践しているけど、
今日は、この考えが裏目に。。
使わなくなったものは、消す。
という考えから派生(?)して、
使わないものは、作らない。(当たり前ですけど。。)
という考えになり、localToGlobalを使っていたら、
思わぬ落とし穴に。
まずは、最も単純なものとして、
以下のようなfla作って、動作を確認。
■ムービークリップの構造 - _root - gray_mc [_x=100/_y=100](基準点は左上) - pink_mc [_x=50/_y=50](基準点は左上)
■フレームスクリプト(第1フレーム) var lgObj:Object = new Object(); lgObj.x = gray_mc.pink_mc._x; lgObj.y = gray_mc.pink_mc._y; gray_mc.localToGlobal(lgObj); trace(lgObj.x + "," + lgObj.y); //出力 150,150
で、今回は、x座標だけ変換できれば(y座標は必要なし)良かったので、
フレームスクリプトの lgObj.y の行を、以下の様に端折りました。
■フレームスクリプト(第1フレーム) var lgObj:Object = new Object(); lgObj.x = gray_mc.pink_mc._x; gray_mc.localToGlobal(lgObj);
これが、間違いだった。。
脳内FlashPlayerでは、当然の事の様に、
trace(lgObj.x); //出力 150
と出力されるものと思いきや、
実際は、
trace(lgObj.x); //出力 50
なんで??
ヘルプを良く読んだら、
x と y の 2 つのプロパティを持つ汎用オブジェクトを作成する必要があります。
と。さらには、
パラメータ
pt:Object - x 座標と y 座標をプロパティとして指定し、Object クラスを使用して作成したオブジェクトの名前または識別子。
と、しっかり書かれていました。。
要するに、yが無くて、変換できなかったから、
変換前の lgObj.x が出力されるのね。
あ〜、勘違い。
と思いつつも、yくらい端折らせてよ、と悪足掻き。