请教FLASH AS2.0函数调用的二个疑问

问题详细如下:

哦,你看的是《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);
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-04
当然第二个函数灵活多了。第二个函数在调用时,不用去修改函数本身,就需要修改参数就能实现效果。而且可以用于多个影片剪辑。而且移动的距离都可以自己改变参数来改变。如果还不明白的话,我举个例子,比如有二个影片剪辑。实例名分别为mc1,mc2如果用第一个函数来实再的话就要写二个函数。分别为
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)
这是二个影片,如果多个影片要实现不同的移动,则更方便。
第2个回答  2013-10-04
编程是要实际做东西的,不是坐而论道的,你做都不做,能看出啥?
第一个问题,你把+和-看成是移动的方向就理解了。这个数值只是移动快慢,跟距离没关系。
第二个问题,灵活不灵活,到底多还是少,你要单独看是看不出来的。就好比洗衣机,你洗一双袜子,当然会说,我看不出用洗衣机比不用有啥好处。
假设要运动的有20个不同的mc,有不同的运动速度,你看看是哪个灵活。
哪里不懂可找我问。

请教FLASH AS2.0函数调用的二个疑问
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轴上不同的增量当然会使得小球...

关于Flash通过As2.0调用网络图片的若干问题。
1 将发布设置选择成“只访问网络”,在本地磁盘打不开是正常的,如果把那个swf文件上传到网上,是可以正常显示的。2 一般有合法网址的图片都可以被flash调用,但是有些网站内的相册的图片却无法正常显示,这是因为某些网站的网址不能被检索到,相册的就更不一定了。3 Flash调用的图片所在网址的网速慢的...

请求FLASH as2.0的Number()函数问题!!!急!!
NaN意思是Not a Number,不是一个数字 说明没有数字输入 也有时候表示输入的不是数字 数字一般不用_root.food_number.text来使用 要显示文本就可以这样用 数字一般用_root.n来使用,n就是一个变量 然后,在输入文本框中设置变量为n 当n不是数字的时候,输出值一样为“NaN”...

关于flash中通过AS2.0代码实现点击按钮跳转到mc指定帧的疑问!
第三帧:botton1.onRelease = function(){ _root.frame2 = 1;gotoAndStop(2);\/\/首先要跳到第二帧 } 第二帧:if(_root.frame2 == 1) P2.gotoAndPlay(11);播放完时:在所在帧处写入代码:_root.frame2 = 0 需要注意的是:按钮要想控制mc的内容,须要在同一个帧里面才行 ...

[Flash] AS2.0中 关于 数组操作 和 排序效率 的疑问
var tester2 = tester;我不清楚你是否明白这种其实只是地址引用 而不是值对象的复制 意思是说 先用你的自定义方法排好序 然后再调用系统方法 对这个排好序的数组再排一次 把tester[i] = random(1000000);改成 tester[i] = i;然后分别注释下面两部分(运行一个 不同时运行两个)得出的结果 ...

FLASH:我有个问题想问下AS2.0的文件从外部引用
_lockroot = true 锁定加载的swf的root引用。

关于FLASH脚本AS2.0冲突问题
你的程序有很多问题,举几个例子如: Obj._visible = false;就显示不了星星了。Obj.duplicateMovieClip('a'+i, i++);应为Obj.duplicateMovieClip(“a"+i, i++);if (i>100){ i = 0;} 应为if (i>200){ i = 100;} 还有一些 ...

flash as2.0 调用外部的音频怎样循环播放这段音频
看看你的代码,有一个start()吧 在小括号内,有两个参数。第一个指定开始播放的时间,第二个指定播放的次数 所以,可以写成 start(0,50)\/\/表示重复播放50遍

一个简单的flash as2.0代码的意思和用法。
在音乐文件上点右键,选择“链接”【flash8没有这个链接,你需要选择属性 然后再切换到AS】在弹出的对话框内 单击“为ActionScript导出”之后,在标识符那里输入 a1 设置完毕后 会在链接那里出现 导出:a1 这样一来,就可以出来效果了 另外,代码第二行小括号内的this是多余的 请去掉它。修改完毕是这样...

FLASH AS2.0 return函数的疑问
这里不必要return返回值的使用 当然也可以在某些值的获取上使用returen

相似回答