(1) 使用include来导入代码
1.打开flash新建一个文档,保存为drag_inclue.fla在场景中创建一个movieclip,本例中使用的圆球,将其转换为影片剪辑,并在场景中将其命名为circle_mc.不需要在库中设置链接属性.
2.新增一层,按下F9打开Actionscript面板,在其中输入代码如下:
//设置当光标移到circle_mc上时显示手形
circle_mc.buttonMode = true;
// 侦听事件
circle_mc.addEventListener(MouseEvent.CLICK,onClick);
circle_mc.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
circle_mc.addEventListener(MouseEvent.MOUSE_UP,onUp);
//定义onClick事件
function onClick(event:MouseEvent):void{
trace("circle clicked");
}
//定义onDown事件
function onDown(event:MouseEvent):void{
circle_mc.startDrag();
}
function onUp(event:MouseEvent):void{
circle_mc.stopDrag();
}
3.将此帧上的代码全部选中,按下ctrl x剪切掉,选择flash的new菜单,新建一个Actionscript文件,在刚剪切掉的代码贴上.保存名为drag_include.as.与drag_include.fla在同一路径下.
4.回到drag_include.fla中,在第一帧上输入如下代码: include "drag_include.as" 测试影片即可以看到与时间线上测试时相同的结果了.此种方式,在As1.0时经常使用.如果你仍习惯这种方式,在Actionscript 3.0中仍可以使用.
(2) 元件类(symbol class)
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class Symbol_class extends MovieClip {
public function Symbol_class(){
}
private function onClick(event:MouseEvent):void{
}
private function onDown(event:MouseEvent):void{
}
private function onUp(event:MouseEvent):void{
} } }
因为我们将类的名称设置为Symbol_class,所以此类文件一定要保存为Symbol_class.as文件.我们还要做一步工作,在源文件中打开库面板,右击circle_mc选择链接,复选Export for Actionscript.在class处输入Symbol_class.as即让我们类与元件相关连..此时测试影片,你会看到与上例中相同的结果.这里注意一点,场景中仍要保证circle_mc的存在.因为在代码中我们并没有动态的贴加circle_mc.同时这个例子与上例一样,我们并没有使用As3.0的Document Class特性.
(3) 动态类(dynamic class)
DocumentClass.as代码:
package {
import flash.display.MovieClip;
public class DocumentClass extends MovieClip {
// 属性
private var _circle:Drag_circle;
private var _wslink:wslink;
private const maxBalls:int = 100;
// 构造函数
public function DocumentClass(){
var i:int;
// 循环创建小球
for(i=0;i<=maxBalls; i++){
// 创建可拖动小球的实例
_circle = new Drag_circle();
// 设置小球实例的一些属性
_circle.scaleY = _circle.scaleX = Math.random();
// 场景中的x,y位置
_circle.x= Math.round(Math.random()*(stage.stageWidth - _circle.width));
_circle.y= Math.round(Math.random()*(stage.stageHeight - _circle.height));
// 在场景上显示
addChild(_circle);
} } } }
Drag_circle.as代码:
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Drag_circle extends Sprite {
public function Drag_circle(){
this.buttonMode = true;
this.addEventListener(MouseEvent.CLICK,onClick);
this.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
this.addEventListener(MouseEvent.MOUSE_UP,onUp);
}
private function onClick(event:MouseEvent):void{
trace("circle clicked");
}
private function onDown(event:MouseEvent):void{
this.startDrag();
}
private function onUp(event:MouseEvent):void{
this.stopDrag();
} } }
打开我们之前所用过的fla文件,将其另存为drag_class.fla文件,与Document.as和Drag_class.as类所在目录相同。打开库面板,选中库面板中的小球,右击选择链接在class名称处输入Drag_class.注意与上面的元件类不同在于,我们不需要让场景中有任何内容,因为我们已在主类DocumentClass.as中动态的贴加和显示了circle_mc.。在DocumentClass.fla中的主场景中,在属性面板中的Document Class输入框中输入我们的主类名DocumentClass.然后你就可以测试了。
(4) 不使用库元件的动态类(dynamic class with no library)
需要在上例的基础上做些改动,首先删去fla中场景中的所有内容,包括库中的内容。
DocumentClass.as类代码如下:
package {
import flash.display.MovieClip;
public class DocumentClass extends MovieClip {
private var _circle:Drag_circle;
private const maxBalls:int = 100;
public function DocumentClass(){
var i:int;
for(i=0;i<=maxBalls; i
_circle = new Drag_circle();
_circle.scaleY = _circle.scaleX = Math.random();
_circle.x= Math.round(Math.random()*(stage.stageWidth - _circle.width));
_circle.y= Math.round(Math.random()*(stage.stageHeight - _circle.height));
addChild(_circle);
} } } }
Drag_circle.as类代码如下:
package {
import flash.display.Sprite;
import flash.display.Shape;
import flash.events.MouseEvent;
public class Drag_circle extends Sprite {
private var _circle:Sprite;
public function Drag_circle(){
_circle = new Sprite();
_circle.graphics.beginFill(0xff0000);
_circle.graphics.drawCircle(-5, -5, 10);
_circle.graphics.endFill();
_circle.buttonMode =true;
addChild(_circle);
_circle.addEventListener(MouseEvent.CLICK,onClick);
_circle.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
_circle.addEventListener(MouseEvent.MOUSE_UP,onUp);
}
private function onClick(event:MouseEvent):void{
trace("circle clicked");
}
private function onDown(event:MouseEvent):void{
_circle.startDrag();
}
private function onUp(event:MouseEvent):void{
_circle.stopDrag();
} } }
注意Drag_circle.as类,我们只是增加了一段代码:
_circle = new Sprite();
_circle.graphics.beginFill(0xff0000);
_circle.graphics.drawCircle(-5, -5, 10);
_circle.graphics.endFill();
还有就是构造函数之前的声明:private var _circle:Sprite; 测试你的影片。当然这里我们绘制的只是一个无渐变的红色圆形。
在.as文件中的辅助类,必须定义在类包以外,并且只针对此文件中的主类和其他辅助类可见。
它的基本结构如下:
package {
class MyClass {
function MyClass() {
var helper:MyHelper = new MyHelper();
} } }
class MyHelper {
function MyHelper() {
var helper:HelpersHelper = new HelpersHelper();
} }
class HelpersHelper {
function HelpersHelper () {
} }
注意,在包块中最多只能定义一个类。在同一个文件中的辅助类不是包块的一部分,并且只能在此文件中可见和被使用。下面我们将我们的类改写成上述的packge类的形式。我们将下面的代码都写在一个DocumentClass.as的文件中,然后在fla文件中的属性面板中的Document Class输入框中输入DocumentClass类名。
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
// Document Class
public class DocumentClass extends MovieClip {
private var _circle:Drag_circle;
private const maxBalls:int = 100;
public function DocumentClass(){
var i:int;
for(i=0;i<=maxBalls; i++){
_circle = new Drag_circle();
_circle.scaleY = _circle.scaleX = Math.random();
_circle.x= Math.round(Math.random()*(stage.stageWidth - _circle.width));
_circle.y= Math.round(Math.random()*(stage.stageHeight - _circle.height));
addChild(_circle);
} } }
public class Drag_circle extends Sprite {
private var _circle:Sprite;
public function Drag_circle(){
_circle = new Sprite();
_circle.graphics.beginFill(0x6D6E71);
_circle.graphics.drawCircle(-5, -5, 10);
_circle.graphics.endFill();
addChild(_circle);
this.buttonMode = true;
_circle.addEventListener(MouseEvent.CLICK,onClick);
_circle.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
_circle.addEventListener(MouseEvent.MOUSE_UP,onUp);
}
private function onClick(event:MouseEvent):void{
trace("circle clicked");
}
private function onDown(event:MouseEvent):void{
_circle.startDrag();
}
private function onUp(event:MouseEvent):void{
_circle.stopDrag();
} } }
现在就可以测试你的影片了。