ハンドラー呼び出し内での作業に問題があります。問題は次のようなものです。
Sprite sprite = new Sprite[spriteArrayLength];
IUpdateHandler mm[i] = new ........// you know what
for(int i = 0; i < spriteArrayLength; i++){
//many other actions
mm[i] = new IUpdateHandler() {
//do somthing with sprite array items
float anyVar = sprite[i].getX();//problem rises here
};
sprite[i].registerUpdateHandler(mm[i]);
}
エラーが表示されるたびに、配列の範囲外に到達するというエラーが表示されます。つまり、 for ループが終了した後にハンドラー呼び出しが実行されるため、既に制限を超えています。上記のようなことを適切な方法で行うにはどうすればよいですか?
編集:
前回のミスですみません。コードの最初の行は次のようになります。
Sprite sprite[] = new Sprite[spriteArrayLength];
IUpdateHandler mm[] = new ........// you know what
これではない:
Sprite sprite = new Sprite[spriteArrayLength];
IUpdateHandler mm[i] = new ........// you know what
これらの行は言及するのにそれほど重要ではないと思ったので、間違いを犯しました。しかし、それでも問題は同じままです。
編集-2:
「範囲外の配列」タイプの実行時エラーが発生します。たとえば、配列のサイズが 6 だとします。つまり、最後の要素は 5 です。しかし、UpdateHandler 内では "i" が 6 で始まり、エラーがスローされます。そして、"i" を final にしてみました。さらに、クラス フィールドとして宣言してグローバルにしました。多くのコードが含まれているため、ここでは短いコード例を記述しようとしています。より良いバージョンは次のとおりです。
public int i;//global declaration
//inside some method:
Sprite sprite[] = new Sprite[spriteArrayLength];
IUpdateHandler mm[] = new IUpdateHandler[spriteArrayLength];
for(i = 0; i < spriteArrayLength; i++){
//many other actions
mm[i] = new IUpdateHandler() {
//do somthing with sprite array items
float anyVar = sprite[i].getX();//problem rises here
};
sprite[i].registerUpdateHandler(mm[i]);
}