影片剪辑属性
通过调整影片剪辑的各种属性可以改变影片剪辑的位置和显示状态。_x和_y属性代表影片剪辑在场景中的水平坐标和垂直坐标。_xscale和_width属性决定影片剪辑在水平方向上的显示宽度,_yscale和_height属性决定影片剪辑在垂直方向上的显示高度。使用_rotation属性可以旋转影片剪辑。_alpha属性代表影片剪辑的透明度,_visible属性决定影片剪辑是否可见。使用关键字_xmouse和_ymouse可以获取鼠标光标在屏幕中的坐标位置。
6.1 坐标
Flash场景中的每个对象都有它的坐标,坐标值以像素为单位。Flash场景的左上角为坐标原点,它的坐标位置为0,0,前一个0表示水平坐标,后一个0表示垂直坐标。Flash默认的场景大小为550×400像素,即场景右下角的坐标为550,400,它表示距坐标原点的水平距离为550,垂直距离为400。
场景中的每一点都可以用坐标表示,如图6-1所示标注了若干点的坐标位置。
图6-1 场景中的坐标位置示意图
习惯地,水平坐标用x表示,垂直坐标用y表示。在Flash中,分别用_x和_y表示x坐标值属性和y坐标值属性。例如,要在主时间轴上表示场景中的影片剪辑myMC的位置属性,可以使用下面的方法:
myMC._x
myMC._y
如果是在myMC自身的脚本中表示它的坐标,也以使用如下的方法:
_x;
_y;
或:
this._x;
this._y;
在属性面板和信息面板中都有可以查看和更改对象的位置。选择“窗口”→“信息”命令或按快捷键Ctrl+I都可以打开信息面板,如图6-2所示。
图6-2 信息面板
信息面板中显示了当前所选图形或影片剪辑的大小、坐标位置、颜色以及鼠标位置等。图6-2中信息面板右边的两个数值框X和Y代表了所选对象的水平坐标和垂直坐标。面板中的 图标表示坐标位置是以所选对象的左上角为基准还是以中心为基本。当前左上角方块呈黑色显示,表示坐标位置以对象左上角为基准,如果中心方块呈黑色显示,表示坐标位置以对象中心为基准。
通过更改_x和_y属性可以在影片播放时改变影片剪辑的位置。如可以为影片剪辑编写如下的事件处理函数:
onClipEvent (enterFrame) {
_x += 5;
_y += 5;
}
该事件处理函数使影片剪辑在每次enterFrame事件中向右和向下移动5像素的位置。
6.2 鼠标位置
你不但可以获得影片中影片剪辑的坐标位置,还可以获得鼠标位置,即鼠标光标在影片中的坐标位置。
表示鼠标光标的坐标属性的关键字是_xmouse和_ymouse,其中,_xmouse代表光标的水平坐标位置,_ymouse代表光标的垂直坐标位置。
需要说明的是,如果这两个关键字用在主时间轴中,则它们表示鼠标光标相对于主场景的坐标位置;如果这两个关键字用在影片剪辑中,则它们表示鼠标光标相对于该影片剪辑的坐标位置。_xmouse和_ymouse属性都是从对象的坐标原点开始计算的,即在主时间轴中代表光标与左上角之间的距离;在影片剪辑中代表光标与影片剪辑中心之间的距离。
多数情况下,你需要用到鼠标光标在主场景中的位置,所以可以使用_root._xmouse和_root._ymouse表示。
你可以使用下面的代码让影片剪辑保持与鼠标位置相同的坐标值:
onClipEvent (enterFrame) {
_x = _root._xmouse;
_y = _root._ymouse;
}
Flash不能获得超出影片播放边界的鼠标位置。这里的边界并不是指影片中设置的场景大小。如将场景大小设置为550×400,在正常播放时能获得的鼠标位置即在(0,0)~(550,400)之间;如果缩放播放窗口,将视当前播放窗口的大小而定;如果进行全屏播放,则与显示器的像素尺寸有关。
6.3 旋转方向
影片剪辑的另一个属性是_rotation。
_rotation属性代表影片剪辑的旋转方向,它是一个角度值,介于-180°~180°之间,可以是整数和浮点数。
_rotation的值始终保持在-180°~180°之间,如果将它的值设置在这个范围之外,系统会自动将其转换为这个范围之间的值。例如,将_rotation的值设置为181°,系统会将它转换为-179°;将_rotation的值设置为-181°,系统会将它转换为179°。
如使用下面的语句实现影片剪辑的连续转动:
onClipEvent (enterFrame) {
_rotation += 10;
}
不用担心_rotation会超出它的范围,系统会自动将它的值转换到-180°~180°之间,并不会影响到影片剪辑转动的连贯性。
6.4 可见性
影片剪辑的另一个属性是_visible,即可见性。_visible属性使用布尔值,即要么为true(1),要么为false(0)。为true表示影片剪辑可见,即显示影片剪辑;为false表示影片剪辑不可见,隐藏影片剪辑。
例如要隐藏影片剪辑myMC:
myMC._visible = false;
6.5 透明度
_alpha(透明度)是区别于_visible的另一个属性,_alpha决定了影片剪辑的透明程度,它的范围在0~100之间,0代表完全透明,100表示不透明。
例如要将影片剪辑myMC的透明度设为50%:
myMC._alpha = 50;
_alpha属性代表了第4种颜色通道,即所谓的alpha通道。前3种颜色通道分别为red(红)、green(绿)、blue(蓝),也就是我们说的三原色通道,通常也简称R、G、B通道。前3种颜色通道决定像素的颜色成份,alpha通道决定像素的透明程度。在计算机中,每种颜色通道都用8 bit(位)来存储,所以如果一幅图像是32位的,它就有所有这4个通道;如果一幅图像是24位的,则它就只有R、G、B这3个通道。
也可以在脚本中设置按钮的_alpha属性。特别指出,将按钮的_alpha属性设置为0,虽然按钮不可见,但是它的热区同样存在,仍然可以对它进行单击等操作;如果要将按钮变为不可用,可以将其_visible属性设置为false。
影片剪辑的不透明状态、_visible=0状态、_alpha=0、50和100时的状态如图6-3所示。
图6-3 影片剪辑的不透明状态、_visible=0状态、_alpha=0、50和100时的状态(借林C图,谢谢)
6.6 缩放属性
影片剪辑的缩放属性包括横向缩放_xscale和纵向缩放_yscale。
_xscale和_yscale的值代表了相对于库中原影片剪辑的横向尺寸width和纵向尺寸height的百分比,而与场景中影片剪辑实例的尺寸无关。如库中影片剪辑元件的横向宽度为150,在场景中将它的实例宽度调整为10,在脚本中将_xscale设置为50,则它在影片播放时显示的横向宽度将是150的50%,即75,而不是50像素或10的50%。
当_xscale和_yscale是0~100之间的数时,缩小原影片剪辑;当_xscale和_yscale是大于100的数时,放大原影片剪辑;当_xscale或_yscale为负时,将在缩放的基础上水平或垂直翻转原影片剪辑。
本例文件包含了一个矩形的影片剪辑和一幅图片,并将矩形所在图层作为遮罩层,如图6-4所示。
图6-4 将矩形影片剪辑作为遮罩图形
在矩形影片剪辑的动作面板中添加如下ActionScript:
onClipEvent (load) {
xs = _width;
ys = _height;
}
onClipEvent (enterFrame) {
_xscale = 100*(_root._xmouse-_x)/(xs/2);
_yscale = 100*(_root._ymouse-_y)/(ys/2);
}
在load事件中,用变量xs和ys取得影片剪辑初始状态下的宽度和高度值。在enterFrame事件中,计算鼠标位置与矩形影片剪辑中心的距离,算出它与矩形宽度和高度值的比值,然后作为_xscale和_yscale的值。该动画实现移动鼠标位置以改变遮罩效果,如图6-5所示。
图6-5 移动鼠标位置以缩放遮罩层中的矩形
6.7 尺寸属性
上面例子中我们用到了影片剪辑的另两个属性:_width和_height。与_xscale和_yscale属性不同,_width和_height代表影片剪辑的绝对宽度和高度,而不是相对比例。
同样可以使用_width和_height调整影片剪辑的尺寸大小,如上例中的ActionScript也可写成如下所示:
onClipEvent (enterFrame) {
_width = Math.abs(_root._xmouse-_x)*2;
_height = Math.abs(_root._ymouse-_y)*2;
}
Math.abs是一个内置函数,用以计算一个数或表达式的绝对值。因为与缩放属性不同,_width和_height的值不能为负,所以这时使用绝对值函数始终给出一个不为负的值。
此处用更简洁的脚本实现了与上例相同的效果。
6.8 练习:使用影片剪辑的各种属性
本例文件动画效果如图6-6所示。
图6-6 tabalball.fla文件的效果
该动画包含一支球杆影片剪辑stick,一个母球影片剪辑ball。在屏幕中移动鼠标,球杆会跟随鼠标转动,这是利用鼠标位置控制球杆的_rotation属性。球杆的影片剪辑中添加了一个隐性按钮(只有最后1帧作为热区,前面3帧都有为空,所以是不可见的),当单击球杆时,控制球杆影片剪辑向后播放,作回拉动作,再出杆击球。当球杆前端回到球的轮廓位置时,用球杆影片剪辑控制母球影片剪辑,将母球击出,然后将其自身的_visible属性设置为false,隐藏球杆。通过调整母球的_x和_y属性,实现母球的滚动、反弹等动作。在母球滚动时,分析母球位置以判断母球是否落袋,如果母球落袋,则使用trace语句给出提示“bad”,将母球重新置于初始位置。当母球停止滚动时,将球杆的_visible属性重新设置为true,并将球杆的位置设置为与母球相同,等待下一次击球。
球杆stick影片剪辑元件:
(1)在stick影片剪辑元件第1帧的帧动作面板中添加如下语句:
stop();
(2)在第2、10、12帧中添加动作,使球杆作回拉——出杆运动。第12帧时的球杆前端应与中心保持相当于母球半径长度即7.5像素的距离,在此帧时将母球击出。
(3)在第12帧的动作面板中添加如下ActionScript:
_root.motherball.v = 20;
_root.motherball.dir = _root.stick._rotation;
上面的语句为motherball实例传送两个参数值v和dir,v代表了母球的运动速度,dir代表了母球的运动方向,它的方向与球杆的旋转方向相同。
(4)在第13~20帧添加过渡,使球杆击球后在场景中保留一段时间。
(5)在第20帧的动作面板中添加如下ActionScript:
_visible = false;
该语句将球杆自身隐藏。
(6)将第1帧中的球杆转换成按钮,选中该按钮,在动作面板中添加如下ActionScript:
on (release) {
play();
}
单击该钮,球杆往后播放,作击球动作。
球杆影片剪辑实例:
在主场景中将球杆和母球放在左边,将它们的中心对齐。为球杆影片剪辑添加如下ActionScript:
onClipEvent (load) {
_x = _root.motherball._x;
_y = _root.motherball._y;
}
onClipEvent (mouseMove) {
xsm = _root._xmouse-_x;
ysm = _root._ymouse-_y;
if (xsm<0) {
_rotation = Math.atan(ysm/xsm)*(180/Math.PI);
} else {
_rotation = Math.atan(ysm/xsm)*(180/Math.PI)+180;
}
}
Math.atan是Flash的内置函数,用它求一个数或表达式的反正切值。Math.PI是Flash的内置常数,代表圆周率。使用Math.atan计算出的反正切值的单位是弧度,而_rotation属性的单位是角度,所以要将其乘以(180/Math.PI)以实现弧度到角度的转换。
在球杆影片剪辑的mouseMove事件中,根据鼠标位置调整_rotation属性的值,使影片剪辑跟随鼠标转动,这也是鼠标跟随动画中的一种。
母球影片剪辑实例:
在母球影片剪辑实例的动作面板中添加如下ActionScript:
onClipEvent (load) {
v = 0; //初速度
dir = ""; //运动方向
vx = 0; //x方向分速度
vy = 0; //y方向分速度
slow = 0; //加速度
x0 = _x; //初始x位置
y0 = _y; //初始y位置
}
onClipEvent (enterFrame) {
//母球运动中
if ((dir != "") && (slow<100)) {
//母球落袋
if (((_x<60) && (_y<85)) || ((_x>440) && (_y<85)) ||
((_x<60) && (_y>265)) || ((_x>440) && (_y>265))) {
_visible = false;
trace("Bad!");
dir = "";
v = 0;
vx = 0;
vy = 0;
slow = 0;
_x = x0;
_y = y0;
_visible = true;
//在母球位置显示球杆
_root.stick._visible = true;
_root.stick.gotoAndStop(1);
_root.stick._x = x0;
_root.stick._y = y0;
}
//撞击球桌左边界
if (_x<60) {
_x = 60;
dir = -(180+dir);
}
//撞击球桌右边界
if (_x>440) {
_x = 440;
dir = 180-dir;
}
//撞击球桌上边界
if (_y<85) {
_y = 85;
dir = -dir;
}
//撞击球桌下边界
if (_y>265) {
_y = 265;
dir = -dir;
}
//调整母球位置和速度
v0 = v*(100-slow)/100;
vx = v0*Math.cos((dir)/(180/Math.PI));
vy = v0*Math.sin((dir)/(180/Math.PI));
_x += vx;
_y += vy;
slow++;
}
//母球减速完毕
if (slow == 100) {
//在母球位置显示球杆
_root.stick._x = _root.motherball._x;
_root.stick._y = _root.motherball._y;
_root.stick._visible = true;
//重置变量
dir = "";
v = 0;
vx = 0;
vy = 0;
slow = 0;
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |