我在处理程序调用中工作时遇到问题。问题如下:
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”成为最终的,甚至通过声明为类字段使其成为全局。我正在尝试在这里编写简短的代码示例,因为它包含许多代码。更好的版本如下:
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]);
}