如果答案显而易见,我很陌生。基本上我有这个程序名为测试的东西,由其他人制作,你可以从影片剪辑中绘制多个孩子,它工作正常。 然而另一个,我移植和调整代码给了我一个错误
RangeError:错误#1125:索引-1超出范围13。 在jocAmare2_fla :: MainTimeline / endDragIt()
非常感谢任何和所有帮助。
https://www.dropbox.com/s/ciy0l2s7hys5lte/test%20stuffs%20for%20the%20things.fla
https://www.dropbox.com/s/9m5s98hq3d3jkrs/joc%20Amare%202.fla
我在pastebins中添加了代码,因为我不想在这里有一面文字
答案 0 :(得分:0)
function endDragIt(evt:Event)
{
var target:MovieClip = evt.target as MovieClip;
target.stopDrag();
var i:int = isOver();
if (target.dropTarget != null && casete.indexOf(target.dropTarget.parent) != -1)
{
target.removeEventListener(MouseEvent.MOUSE_DOWN,dragIt);
target.mouseEnabled = false;
var caseta:MovieClip = casete[i];
var clasaTarget = Object(target).constructor;
if (clase[i] == clasaTarget)
{
trace("Bravo!");
trace("Ai facut bine!");
score+=3/5;
target.x = caseta.x;
target.y = caseta.y;
trace("Scor ok="+score);
if(score>1 && score<1.5){
scorfinal=1;
trace(scorfinal);
}
if(score>1.5 && score < 2.5){
scorfinal=2;
trace(scorfinal);
}
if(score>2.5){
scorfinal=3;
trace(scorfinal);
}
}
else
{
target.x=caseta.x;
target.y=caseta.y;
trace("gresit");
}
}else{
target.x+=1000;
target.y+=1000;
}
}
导致错误的功能......
看着它,我猜这里出错:
var caseta:MovieClip = casete[i];
因为i = -1
,并且该数组中没有-1
。
现在...... 为什么我会到-1?
这样做是因为isOver()
返回-1。
这似乎是你的问题。你停止拖东西...... 而且你不再超过你选择的对象了。呵呵。 多奇怪。
查看其他代码,我看不出太多差异。
我的建议:改变两个应用程序以跟踪isOver()函数中的信息。检查输出中是否有任何不同。特别感兴趣的是宽度和高度的计算。
function isOver():int{
for(var i:int = 0; i<casete.length; i++){
if(this.mouseX >= casete[i].x-casete[i].width/2 && this.mouseX <= casete[i].x+casete[i].width/2)
if(this.mouseY >= casete[i].y-casete[i].height/2 && this.mouseY <= casete[i].y+casete[i].height/2)
return i;
}
return -1;
}
我会将该功能更改为
function isOver():int{
trace("isOver called");
trace("mouseX: "+this.mouseX+", mouseY:"+this.mouseY);
for(var i:int = 0; i<casete.length; i++){
trace("testing casete "+i);
trace("x lower bound:"+(casete[i].x-casete[i].width/2)+", x upper bound:"+(casete[i].x+casete[i].width/2));
trace("y lower bound:"+(casete[i].y-casete[i].height/2)+", y upper bound:"+(casete[i].y+casete[i].height/2));
if(this.mouseX >= casete[i].x-casete[i].width/2 && this.mouseX <= casete[i].x+casete[i].width/2)
if(this.mouseY >= casete[i].y-casete[i].height/2 && this.mouseY <= casete[i].y+casete[i].height/2)
return i;
}
return -1;
}
理想情况下,您应该看到的是两个程序之间没有区别。
如果是这样,那么你偶然发现了另一个错误;当释放鼠标时,您仍然在对象上的假设是假的。如果两个程序之间存在差异(执行类似的操作时!),那么其余部分的实现可能是错误的。