Actionscript 3 RangeError:错误#1125:索引0超出范围0
只是一直在尝试随机化一堆按钮坐标,并成功地管理使用此代码Actionscript 3 RangeError:错误#1125:索引0超出范围0,actionscript-3,actionscript,range,coordinates,Actionscript 3,Actionscript,Range,Coordinates,只是一直在尝试随机化一堆按钮坐标,并成功地管理使用此代码 var coordinates:Vector.<Point> = new <Point>[ new Point(44, 420), new Point(270, 420), new Point(44, 550), new Point(270, 550) ]; function positionAtRandomCoordinate(object:DisplayObject):void { var index:in
var coordinates:Vector.<Point> = new <Point>[
new Point(44, 420),
new Point(270, 420),
new Point(44, 550),
new Point(270, 550)
];
function positionAtRandomCoordinate(object:DisplayObject):void {
var index:int = Math.random() * coordinates.length;
var coordinate:Point = coordinates.splice(index, 1)[0];
object.x = coordinate.x;
object.y = coordinate.y;
}
positionAtRandomCoordinate(answerButtons);
positionAtRandomCoordinate(answerButtons_2);
positionAtRandomCoordinate(answerButtons_3);
positionAtRandomCoordinate(answerButtons_4);
大多数checkAnswers函数都与我想的问题无关,它只是通过检查两件事情是否匹配来显示函数是如何工作的,需要发生一些事情
当我运行此程序时,按钮会像正常情况一样随机化。。。但是当我得到一个正确的答案时,我的输出就会出现这个错误
RangeError:错误#1125:索引0超出范围0
…他们不再随机化了
有什么想法吗?非常感谢
编辑
根据Aarons的建议,我修改的代码是
function createCoordinatePositions():Vector.<Point> {
return new <Point>[
new Point(44, 420),
new Point(270, 420),
new Point(44, 550),
new Point(270, 550)
];
}
function positionAtRandomCoordinate(object:DisplayObject, coordinates:Vector.<Point>):void {
var index:int = Math.random() * coordinates.length;
var coordinate:Point = coordinates.splice(index, 1)[0];
object.x = coordinate.x;
object.y = coordinate.y;
}
function positionButtonsRandomly():void {
var coordinates:Vector.<Point> = createCoordinatePositions();
positionAtRandomCoordinate(answerButtons, coordinates);
positionAtRandomCoordinate(answerButtons_2, coordinates);
positionAtRandomCoordinate(answerButtons_3, coordinates);
positionAtRandomCoordinate(answerButtons_4, coordinates);
}
它现在可以无缝工作,没有范围错误
谢谢!大家好。每次都需要重新创建坐标,因为在拾取随机位置时,要使用
splice()
删除所有点
例如,您可以创建一个函数来创建可能的坐标,而不是使用顶级coordinates
var:
function createCoordinatePositions():Vector.<Point> {
return new <Point>[
new Point(44, 420),
new Point(270, 420),
new Point(44, 550),
new Point(270, 550)
];
}
function positionAtRandomCoordinate(object:DisplayObject, coordinates:Vector.<Pont>):void {
// Same as before
}
函数createCoordinatePositions():Vector。{
还新[
新点(44420),
新点(270420),
新点(44550),
新点(270550)
];
}
然后修改随机位置函数以获取可能坐标的参数:
function createCoordinatePositions():Vector.<Point> {
return new <Point>[
new Point(44, 420),
new Point(270, 420),
new Point(44, 550),
new Point(270, 550)
];
}
function positionAtRandomCoordinate(object:DisplayObject, coordinates:Vector.<Pont>):void {
// Same as before
}
函数位置区域坐标(对象:DisplayObject,坐标:Vector.):void{
//和以前一样
}
现在要随机定位所有按钮,首先创建一个可能坐标的新列表,并将其传递到每个随机定位调用中:
function positionButtonsRandomly():void {
var coordinates:Vector.<Point> = createCoordinatePositions();
positionAtRandomCoordinate(answerButtons, coordinates);
positionAtRandomCoordinate(answerButtons_2, coordinates);
positionAtRandomCoordinate(answerButtons_3, coordinates);
positionAtRandomCoordinate(answerButtons_4, coordinates);
// By here the coordinates.length = 0
}
函数位置按钮nsrandomly():void{
变量坐标:Vector.=createCoordinatePositions();
位置和坐标(应答按钮、坐标);
位置和坐标(应答按钮2,坐标);
位置和坐标(应答按钮3,坐标);
位置和坐标(应答按钮4,坐标);
//此处坐标为0.length=0
}
第二次执行该代码时,您的坐标
数组为空!别忘了你使用了坐标。splice()…嘿,Aaron,非常感谢你在我的这个项目上给予的帮助。我已经对代码做了这些调整,而且每当我得到正确答案时,我似乎仍然会得到范围错误。有什么想法吗?应该行得通,发布你的更新代码。将整个内容放在一个可以调用的函数中可能会有所帮助,例如positionbuttonnsrandomly()
。我用一个例子更新了我的答案。刚刚看到你对答案的修改,现在它在一个函数中,checkAnswers可以正确地调用它,这对我来说很有意义。非常感谢你的帮助,亚伦,你真是个天才。