ゲームプログラミング相談室【Part6】
■ このスレッドは過去ログ倉庫に格納されています
0603名前は開発中のものです。
2005/12/25(日) 21:16:44ID:10j12RX3Handle のマジックナンバーは、
ハンドルが指すオブジェクトを区別するためのID(識別値)。
詳しく説明すると、
HandleMgr はメモリを節約するためにデータ配列の同じ位置を何度も再利用する。
そのため、ハンドルを参照したとき、それが指す位置のオブジェクトが入れ替わっている可能性がある。
これを判断するのに必要なのがマジックナンバー(=ID)。
例えば、下の様なデータ配列があるとする(数字はID)。
データ { 1, 2, 3 }
このとき 0 番目のハンドルを取得する。
ハンドルA { index=0, ID=1 }
次にIDが 1 のオブジェクトをデータから削除すると、その位置は空になる。
データ { 0, 2, 3 } // 0 番目に 0 が入った
次にオブジェクトをデータに追加すると新しい ID が割り振られ、空の位置に入る。
データ { 5, 2, 3 } // 0 番目に 5 が入った
このとき、さっき作ったハンドルAを参照してみる。
データの ハンドルA.index 位置の ID は 5。
ハンドルA.ID は 1。
ID が一致しないので、ハンドルは無効になった(オブジェクトは削除された)と分かる。
逆に ID が一致した場合は、ハンドルが指す位置のオブジェクトは存在していると分かる。
■ このスレッドは過去ログ倉庫に格納されています