发布网友 发布时间:2022-05-12 05:07
共3个回答
热心网友 时间:2023-11-18 11:42
哦,你看的是《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;
plicateBall(ball, total);
function plicateBall(obj, num)
{
for (var i:Number = 1; i <= num; i++)
{
plicateMovieClip(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)
{
plicateBall(ball, total);
}
};
function moveBall(mc, distance, angle)
{
mc._x += distance * Math.cos(angle);
mc._y += distance * Math.sin(angle);
}
热心网友 时间:2023-11-18 11:43
当然第二个函数灵活多了。第二个函数在调用时,不用去修改函数本身,就需要修改参数就能实现效果。而且可以用于多个影片剪辑。而且移动的距离都可以自己改变参数来改变。如果还不明白的话,我举个例子,比如有二个影片剪辑。实例名分别为mc1,mc2如果用第一个函数来实再的话就要写二个函数。分别为热心网友 时间:2023-11-18 11:43
编程是要实际做东西的,不是坐而论道的,你做都不做,能看出啥?