AS3.0旅情9 ~時を刻まないgetTimer~
週末会社にて開発詰めの修正を行っていると、刻々と過ぎる時間の大切さを切に感じます。
今回は“時”つながりで、Flashに馴染み深い「getTimer」の小話です。
開発中、複数の同系オブジェクトを生成した時ですが、オブジェクト名をランダムに付けようとした際に、getTimerを再帰内で掛けました。
getTimerを用いれば重複しない数字が名前になると考えたためです。
Math.randomの乱数を用いた方法や、ユニークな文字列を生成する方法もありますが、この時の気分はgetTimerでした。
処理の内訳は、以下のようなものです。
import flash.display.Sprite; import flash.utils.*; /** * 複数生成 */ function createList() { var child:Sprite; for (var i:int = 1; i < 999; i++) { child = new Sprite(); child.name = "child"+getTimer(); } }
上記を走査中、生成オブジェクト名の結果が何度か変化しました。
期待と異なり、同じオブジェクト名が生成される時があるのです。
今回、オブジェクト名を元に処理を他の関数で行う際、オブジェクト名の参照によるバグが生じ(オブジェクト名の重複による参照違い)発見に至りました。
上記の結果より、再帰処理のスピードがFlash上のgetTimer値を更新するのよりも早い段階があるのだと推測します。
再帰処理中に、getTimerを用いてのユニークな処理は推奨されないようですね。
“時”は使いどころ。足元をすくわれたので、今後は気をつけていこうと思います。