flash as 编写代码(十四)

关于查错:

往往从有思路到编程实现效果不可能一次完成,也就是说,难免会出现错误,不能通过编译系统(不知道FLASH里怎么称呼,说成编译系统对不对咧,还请各位指教)。那这时候就需要我们查错。

1.充分利用输出窗口给出的提示:

例如:在按钮上加如下代码:
duplicateMovieClip("MC","MC"+j,10+j);
c=random(40);
setProperty("MC"+j,_y,(c+30));
setProperty"MC"+j,_x,random(600));
setProperty("MC"+j,_alpha,(2*c+20));
j++;
if(j>700){
j=1;
}

ctrl+enter测试影片,输出窗口提示:

场景=场景 1, 图层=AS, 帧=2: 第 4 行: Unknown error ID #1033
setProperty"MC"+j,_x,random(600));

就是说第四行有错误,回到编辑状态,一看,原来少了半边括号,就是说输出窗口会给我们提供很多必要的帮助,一定要好好利用!让AS编辑区显示行号的方法,如图四:

点一下红色圈中的按钮,选中显示行号即可!其他按钮还可以实现很多辅助功能,自己去看一看就知道了!

2.上述方法只能排除语法上的错误,也就是说,你程序本身算法或者程序中参数的传递,出现了问题,编译系统是不可能帮你检查出来的,这个只能靠你自己去检查。我这里介绍一点自己的方法,供大家参考:首先,你得自己心里想明白按照自己的这个算法思想能不能实现想要的结果,就是说先在心里把整个算法重新再理一遍,有时候想的不成熟,或者一开始的思路有疏漏,这时候应该可以更正或者修改过来!当你确定自己的程序设计思路没有问题但是依然出不了效果时,你就该考虑是程序实现时出了错误,比如参数传递有问题,路径指示不明确甚至错误等等都是比较常见的(至少我就常常犯这样的错误);

举个例子:

在主场景中有一个输入文本,其实例名为text 变量名为xx,
然后主场景的帧上加:

_root.text.onChanged = function() {
n=Number(xx);
};//当文本框内容改变时就把文本框的值赋给n这个变量;

然后在主场景中一个风车状的MC上加:

onClipEvent(enterFrame){
this._rotation=this._rotation+n;
}//意思是让风车旋转,速度为n;

但是测试影片,就是没有效果,为什么呢,想想看,先把风车上的代码改为:
onClipEvent(enterFrame){
this._rotation=this._rotation+3;
}//指定一个数值作为旋转的速度,测试发现,旋转正常;

这就提醒我们,是不是参数传递出了问题呢,哦!!!对,因为在帧上加的代码,所产生的变量n实际是主场景中的变量,把他传递到MC中时,应该确定起准确的位置。再次修改源代码,MC上的代码改为:
onClipEvent(enterFrame){
this._rotation=this._rotation+_root.n;
}

再次测试,一切正常,旋转速度随着输入数字的变化而变化

3.学会使用trace语句,检测错误!

上面的例子中变量比较少,所以很容易发现问题,如果一个程序中有多个变量,而且比较复杂,那就需要分别对他们进行跟踪查看,方法就是利用trace语句,在某个变量每次发生变化后都用trace将其输出,以便查看其运算结果是否和预期的一致!

同样举个例子:随机抽签效果!

十个MC,透明度均为30;

主场景中的关键帧上加:
a =new Array(0,1,2,3,4,5,6,7,8,9);//定义数组;
mm=0;//点击次数统计;
nn=10;//数组元素个数;

选择按钮上加:

on(press){
i = random(nn);
j = a;
a1=a.slice(0,i);
trace(a1);//输出抽取的部分数所组成的新的数组a1;
a2=a.slice(i+1,nn);
trace(a2);//输出抽取的另外一部分数所组成的新的数组a2;
a=a1.concat(a2);
trace(a);//输出组合后的数组,也就是新的数组a;
setProperty("mc"+j,_alpha,getProperty("mc"+j,_alpha)+30);
mm++;
nn--;
if(mm==10){
text="抽签结束!"
mm="10";
_root.but._visible=false;

}
}

采用以上方法后,每点击一次按钮,窗口都输出三排数字,最后一排中比上一次输出少掉的那个数字就是被抽取的数字;这样一来,每运行一次代码,程序人员都可以方便的查看各个变量的运算情况!

源文地址:
dispbbs.asp?boardID=1&ID=141361
PS:

a1=a.slice(0,i);//截取数组a中从第0个到第i个元素组成新数组返回值赋值给数组a1
a2=a.slice(i+1,nn);//截取数组a中从第i+1个到最后一个元素组成新数组返回值赋值给数组a2
a=a1.concat(a2);//连接 a1和a2
setProperty("mc"+j,_alpha,getProperty("mc"+j,_alpha)+30);//把被选中的对象透明度加30;
_root.but._visible=false;//把按钮隐藏;

你可能感兴趣的:(Flash)