运用Actions语句实现Flash中的热区交互

2009-03-02 02:43
中小学信息技术教育 2009年1期
关键词:热区指针鼠标

杜 娟

热区,通俗地讲就是一个看不见的交互区域,通过单击、滑过等响应方式触发其包含的其他响应。在Flash中没有明确这种功能,但是我们可以综合运用元件(影片、按钮)和Actions语句来实现。

一、热区的建立

(一)特殊按钮法

Flash中按钮制作共包括四帧,依次为:弹起(release)、指针经过(pass)、按下(down)和单击(press)。如果在前三帧不做任何设置,而只在第四帧中绘制形状或导入一幅图片,如五角星、动物、地图等,那么就制作了一个“无形”的特殊按钮。这种按钮放在场景中是看不到的,但一样可以实现按钮的交互,在绘制的形状范围内单击,热区响应就实现了,响应的区域就是这些隐藏的图形。

(二)元件透明法

在Flash6.0以后的版本中,图形、影片元件是可以进行类似于按钮交互的。即通过给图片、影片元件加上Actions语句实现一些特殊的功能,而元件可以设置多种属性,所以我们说赋予语句的元件在某种意义上是增强型的按钮。如将图片元件的透明度(Alpha)设置为“0”并且给其加上交互语句,此时图片就是一个热区。再如,将动态影片元件进行透明度设置的话,那么热区也在不停地变化。从而使热区更加丰富多彩。需要提示的是:这一方法同样适用于按钮元件,虽然做法不同,但可以达到和前一种方法一样的效果。

二、热区的响应

(一)鼠标与热区的响应

当鼠标指向某一热区时,屏幕上会给出明显的变化对用户进行提示,通常采用的方式是出现一段解释文字、鼠标外形的变化或播放声音等。

1.文字注释响应

即当鼠标进入由按钮制作的隐藏区域中,出现文字提示。此效果可利用控制元件的透明度alhpa来完成,可以给按钮加上如下语句实现提示:首先确保提示的文字内容是一个影片元件,为其命名为实例名instancename,并将其alpha值设定为0,即不透明。在按钮的“动作”面板中编写如下的Active脚本:

on (rollOver) {

instancename._alpha = 100;

}

on (rollOut) {

instancename._alpha = 0;

}

2.用自定义鼠标注释响应

要创建自定义指针,可在舞台上设计某种影片剪辑。再在动作脚本中隐藏标准指针,并跟踪自定义指针的移动。要隐藏标准指针,可使用内置Mouse类的Mouse.hide()方法。要使用影片剪辑作为自定义指针,可使用startDrag()动作。创建影片剪辑,将其用做自定义指针并将该剪辑的实例放置在舞台上。在“动作”面板中键入以下内容:

on (rollOver) {

Mouse.hide();

newmouse._alpha = 100;

startDrag(newmouse, true);

updateAfterEvent();

}

on (rollOut) {

Mouse.show();

newmouse._alpha = 0;

}

3.声音注释响应

当鼠标进入热区范围,通过一段声音提示。这种方式往往用于低年级识字教学中。其做法是:首先将某段声音导入到舞台上。打开库,选中刚刚导入的声音,单击右键,点击“链接”,在弹出的“链接属性”对话框中,输入声音的标识符,如soundlable,并将“作为动作脚本”的复选框勾中,点击“确定”按钮确认。回到舞台上,选择“窗口”→“开发面板”→“行为”,在行为属性框中添加声音行为,即选择“+”,选择“声音”→“从库加载声音”,在对话框中输入声音链接的ID,也就是声音的标识符sound- lable,以及声音的实例名称,如instancename。接下来点击“确定”按钮即可。这时,会发现“行为”属性面板上增加了“释放时”的行为,只需要将其改为“移入时”即可。同样的操作方法,“移出时”的行为是停止声音。该部分的Active脚本如下:

on (rollOver) {

//Play Internal Sound Behavior

if(_global.Behaviors == null)_global.Behaviors = {};

if(_global.Behaviors.Sound == null)_global.Behaviors.Sound = {};

if(typeof this.createEmptyMovieClip == 'undefined'){

this._parent.createEmptyMovieClip('BS_instancename',new Date().getTime()-(Math.floor((new Date().getTime()) /10000)*10000) );

_global.Behaviors.Sound.instancename = new Sound(this._parent.BS_instancename);

} else {

this.createEmptyMovieClip('_instancename_',new Date().getTime()-(Math.floor((new Date().getTime()) /10000)*10000) );

_global.Behaviors.Sound.instancename = new Sound(this.BS_instancename);

}

_global.Behaviors.Sound.instancename.attachSound("soundlable");

if (true) {

_global.Behaviors.Sound.instancename.start(0,1);

}

//End Behavior

on (rollOut) {

//Stop Sound Behavior

_global.Behaviors.Sound.instancename.stop("soundlable");

}

以上都是以鼠标移入热区为例进行热区响应的,其实还可以利用语句实现其他方式的响应。如在热区内按下鼠标:MovieorbuttonName.onPress;单击热区:MovieorbuttonName.onRelease;按下鼠标:MovieorbuttonName.onMouseDown;移动鼠标:MovieorbuttonName.onMouseMove;鼠标到达热区上:MovieorbuttonName.onRollOver;鼠标从影片移到热区外:MovieorbuttonName.onRollOut。

(二)元件与热区的响应

这种响应不仅仅是鼠标与热区之间的交互,而增加了第三方,也就是当某个物体被移动到热区上时产生交互,这种方式在一些实验或游戏中经常能够见到。一般是当物体移动到热区上时响应交互,当没有到达热区上时物体返回到原来的位置。

首先制作两个元件——被拖动的物体和热区,物体的实例名为Object,热区的实例名为Hotarea。再为元件所在的帧加上如下Actions语句:

_root.object.onPress = function() {

_root.object.startDrag();

x0=_root.hotarea._x;

y0=_root.hotarea._y ;

x1=_root.object._x;

y1=_root.object._y;

};

_root.object.onRelease = function(){

_root.object.stopDrag();

if(_root.hotarea.hitTest(_root.object))

{

_root.object._x = x0;

_root.object._y = y0;

_root.object.stopDrag();

trace("到达目标区域");

}

else

{ _root.object._x = x1;

_root.object._y = y1;

trace("没有到达");

}

};

trace语句可以替换为需要的提示方式。如:gotoandplay()、music.start()等。

(作者单位:辽宁电化教育馆)

猜你喜欢
热区指针鼠标
不忘初心继往开来谱写热作新篇章
——《热区特色农业产业发展与关键技术专刊》刊首语
Progress in Neural NLP: Modeling, Learning, and Reasoning
区域活动中“冷区”向“热区”的转变
基于改进Hough变换和BP网络的指针仪表识别
定向退火条件下柱状晶形成及连续扩展的相场模拟
ARM Cortex—MO/MO+单片机的指针变量替换方法
滇西热区柚早结丰产栽培关键技术
超能力鼠标
鼠标也可以是这样的