|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Flash动画制作软件的界面没有太大的改变,只是在以前的属性面板右侧增加了两个新的选项“参数”和“滤镜”。
本例持续解说AS的基本常识,明天我们来进修FlashAS进门系列教程第七课:影片剪辑第五节拖动与碰撞检测,对Flash的AS编程有乐趣的伴侣能够到论坛与作者交换。
上一篇文章:Flashas进门(10):影片剪辑的深度
第五节拖动与碰撞检测
AS的一个主要上风就是能够完成交互动画,一些殊效不必AS也是能够做出来的,但交互的动画不必AS则是没法完成的。拖动MC则是交互动画的一个例子。
startDrag()函数或MovieClip.startDrag()办法:
利用startDrag()能够完成拖动效果。格局:
MC.startDrag(一个布尔值,右边,上边,右侧,下边);
这个办法中的一切参数都是可选的,便可要可不要。上面先容一下这些参数:
一个布尔值:true或false。当设定为true时鼠标地位将锁定在要拖动的MC的注册点上。想想我们要自界说鼠标指针,这个参数是否是很有效呢?
前面的4个边,断定了MC能够被拖动的局限。想想我们要做一个把持滑条这几个参数是否是很有效呢?
上面实习一下:
自界说鼠标指针:
新建一个MC,画一个或找一个你喜好的鼠标图形,图形应当有一个较尖的部位作为针尖吧?将这个针尖与窗口中的十字对齐。回到主场景,将这个MC拖到舞台上,翻开属性面板,实例称号为:mouse_mc;翻开帧举措面板输出:
Mouse.hide();
mouse_mc.startDrag(true);
测试影片,你会发明你的鼠标已酿成你喜好的图形了。
代码中第一句将体系鼠标埋没起来,第二句使你的图形能够拖动了,而且鼠标指针被定位在针尖处。利用自界说鼠标要注重的是,你不克不及再拖动第二个MC,由于一次只能拖动一个MC,当你拖动第二个MC时,你的鼠标图形将不会再被拖动了。
stopDrag()办法:
下面先容了入手下手拖动MC的办法,入手下手拖动总得有中断拖的时分啊,这个办法就是中断拖动。我们回忆一下拖动一个MC的历程,一样平常来讲,都是点下鼠标左键不放,就能够拖动了,摊开鼠标后就中断拖动,是如许的吧?以是一样平常将startDrag()放到MC的onPress事务(点下鼠标时)中,而将stopDrag()放到onRelease事务(摊开鼠标时)中。
滑动把持条:
偶然我们会用到滑动把持条,好比把持音量巨细,播放进度等。那末滑块就必要用到拖动的办法。
用矩形工具画一个修长的矩形,笔触添补公随你喜好,要不要都行,最少要一个吧?将它转换为MC,双击它进进编纂形态,翻开对齐面板选择相对舞台,左对齐,回到主场景,翻开属性面板,实例称号为blt_mc。然后再画一个很短的矩形,做滑块,也转换为MC,也同修长的矩形一样的做法,只是居中对齐,最初的实例名为hk_mc。
blt_mc移到你想它所处的地位,将hk_mc移到blt_mc上。
在帧举措面板中输出:
l=blt_mc._x;
r=l+blt_mc._width;
h=blt_mc._y;
hk_mc.onPress=function(){
this.startDrag("true",l,h,r,h);
}
hk_mc.onRelease=function(){
stopDrag();
num=(hk_mc._x-blt_mc._x)/blt_mc._width;
}
测试影片,拖动滑块会发明滑块只能在进度条的局限内拖动了。这是由于我们对startDrag()因为办法使用了4个参数:l,r,h.它们分离是进度条的摆布边的x地位及y轴的地位。滑块的挪动局限被限制在这个局限内。
从下面的代码中能够看出,当鼠标摊开时会发生一个num变量,这个变量是用滑块的x坐标减往进度条的x坐标除以进度条的长度,如许就能够失掉一个0~1的数字。有了这个数字,我们就能够用于任何必要用数字把持的工具了。
_droptarget属性:
大概会有这类情形,我们拖动一个工具,想晓得它是不是被拖到了另外一个工具之上,好比我们拖动苹果到盘子中,我们大概想晓得苹果是不是被拖到了盘子之上,假如是苹果则定位到盘子上,假如不是苹果就失落到深渊中。MC的_droptarget属性将前往被自已堆叠鄙人面的MC的称号。好比将苹果拖到盘子上时,苹果将盘子压鄙人面,苹果的_droptarget属性将前往盘子的称号。但它前往的称号是带反斜杠的格局的,因而必要用eval()将其转换为尺度格局,如:eval(苹果._droptarget)这一句了局是:盘子。
做个实习熟习一下:
在舞台上画两个园,分歧的色彩,均转换为MC,实例称号分离为:mc1_mc,mc2_mc.右击mc1_mc>分列>移至顶层;翻开举措面板,输出:
mcx=mc1_mc._x;
mcy=mc1_mc._y;
mc1_mc.onPress=function(){
this.startDrag(true);
}
mc1_mc.onRelease=function(){
stopDrag();
if(eval(mc1_mc._droptarget)==mc2_mc){
this._x=mc2_mc._x;
this._y=mc2_mc._y;
}else{
this._x=mcx;
this._y=mcy;
}
}
测试影片,在mc1_mc上点击时能够拖动,将它拖到mc2_mc上摊开鼠标,则与mc2_mc堆叠,假如不在mc2_mc上摊开鼠标,则回到原位。
这类反省一个MC是不是被拖到另外一个MC之上另有另外一种办法,那就是碰撞检测。
hitTest()办法:
该办法将检测MC是不是与某点或与另外一MC产生订交(碰撞)。假如产生订交则前往true,不然前往false.
用法:1.与某点订交:MC.hitTest(x,y,true或false);
这将检测MC是不是与括号中的x,y所断定的点(x,y)订交。前面的布尔值假如为ture,那末将检测MC的实践图形局限,假如为false则检测MC的外框是不是与(x,y)订交。
2.MC与MC订交:MC.hitTest(另外一MC).
把下面的的实习改成上面的代码,可失掉不异的了局:
mcx=mc1_mc._x;
mcy=mc1_mc._y;
mc1_mc.onPress=function(){
this.startDrag(true);
}
mc1_mc.onRelease=function(){
stopDrag();
if(this.hitTest(mc2_mc)){
this._x=mc2_mc._x;
this._y=mc2_mc._y;
}else{
this._x=mcx;
this._y=mcy;
}
}
ActionScript是一种程序语言的简单文本文件.FLA档案能够直接包含ActionScript。 |
|