哦,你看的是《actionscript 权威指南》这本书,这本书很好,值得好好学习。
function moveBall_1(){
Ball._x += 10;
Ball._y += 10;
}
function moveBall_2(){
Ball._x += 10;
Ball._y -= 15;
}
问题1:moveBall_1()函数执行的时候,小球是向屏幕右下角方向运动的。moveBall_2()函数执行的时候小球向屏幕右上角运动,x和y轴上不同的增量当然会使得小球运动的距离不同了。如果希望小球向任意方向运动的距离都一样的话,应该使用三角函数值来实现,一会我用函数封装的形式给你例子。
问题2:例子中的movieClip()函数是经过封装后的函数,我们编写自定义函数的时候应该像这样编写。封装后的函数它的灵活性体现在函数可以应用到不同的对象上,而且可以使用不同的参数达到不同的效果,因此函数在重复使用的时候非常方便。第一种函数的写法,只能固定对一个对象进行操作,而封装后的函数可以用参数的形式来指定。
例如,movieClip(Ball1, 10, 10)可以让Ball1向右下角运动,movieClip(Ball2, -20, -20)可以让Ball2向左上角以更双倍的距离移动。我做了一个复制多个小球,并让小球以不同方向等距离(即相同的速度)运动。如果用第一种函数来写moveBall()的话用起来就没有这么方便了。代码如下:
//radius是小球每次运动的距离,即小球运动的速度
var radius:Number = 10;
//total是小球的数量
var total:Number = 30;
ball._visible = false;
duplicateBall(ball, total);
function duplicateBall(obj, num)
{
for (var i:Number = 1; i <= num; i++)
{
duplicateMovieClip(obj, "ball" + i, i);
}
}
this.onEnterFrame = function()
{
for (var n:Number = 1; n <= total; n++)
{
moveBall(this["ball" + n], radius, (n-1) * (360/total) * Math.PI / 180);
}
if (ball1._x < 0 || ball1._x > Stage.width)
{
duplicateBall(ball, total);
}
};
function moveBall(mc, distance, angle)
{
mc._x += distance * Math.cos(angle);
mc._y += distance * Math.sin(angle);
}
function moveBall1(){
mc1._x+=15
mc1._y-=15
}
function moveBall2(){
mc2._x+=15
mc2._y-=15
}
moveBall1()
moveBall2()
而如果用第二个就方便多了。写法如下:
Function moveClip(theClip,xDist,yDist){
theClip._x+=xDist
theClip._y+=yDist
}
moveClip(mc1,15,-15)
moveClip(mc2,15,-15)
这是二个影片,如果多个影片要实现不同的移动,则更方便。
第一个问题,你把+和-看成是移动的方向就理解了。这个数值只是移动快慢,跟距离没关系。
第二个问题,灵活不灵活,到底多还是少,你要单独看是看不出来的。就好比洗衣机,你洗一双袜子,当然会说,我看不出用洗衣机比不用有啥好处。
假设要运动的有20个不同的mc,有不同的运动速度,你看看是哪个灵活。
哪里不懂可找我问。