客服咨询
备案专员
域名专员
问题提交
汇款方式
帮助首页
常见问题
视频问题
新闻公告
最新资讯
备案专题
会员管理
主站导航
首页
域名注册
虚拟主机
云主机
VPS主机
智能建站
建站服务
微信平台
企业邮箱
管理中心
欢迎来到万象互联帮助中心,我们将竭力为您解决问题!
域名问题
主机问题
邮局问题
建站问题
财务问题
汇款方式
关于我们
业务流程
会员注册
域名注册
虚拟主机
企业邮局
数据库
VPS主机
代理平台
智能建站
其他视频
公告列表
新闻信息
网站推广
网站制作
Net教程
PHP教程
JSP教程
数据库
其他信息
公告栏
法律法规
系统帮助
相关下载
政务公开
备案常见问题
登录www.163ns.com会员管理中心
您现在的位置:
万象互联帮助中心
>>
最新资讯
>>
详细内容
<<返回上一页
浅谈AS外部文件编写
大
中
小
文章来源:
万象互联
更新时间:
2012-11-23
分享到:
include
如果你之前了解As1.0,As2.0编程,那么对include一定不陌生,在Actionscript 3.0中我们仍可以使用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中仍可以使用.
元件类(symbol class)
这里所说的元件件类,实际是指为flash影片中的元件指定一个链接类名.它与上面的include 的不同之处于,它使用的是严格的类结构.而不是我们习惯上的时间线编写方式.我们要将小圆球的拖动功能封装起来,这样不论你创建多少可以拖动的小球,都会变得很轻松,只需要创建它的实例并显示出来即可。
我们仍使用上例来说明问题.打开drag_include.fla文件,将其另存为Symbol_class.fla文件,新建一个Actionscript文件,将其保存为Symbol_class.as文件,与Symbol_class.fla文件在相同目录下。现在我们将上面的例子中的代码抽象成类如下:
代码:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class Symbol_class extends MovieClip {
public function Symbol_class(){
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();
}
}
}
因为我们将类的名称设置为Symbol_class,所以此类文件一定要保存为Symbol_class.as文件.我们还要做一步工作,在源文件中打开库面板,右击circle_mc选择链接,复选Export for Actionscript.在class处输入Symbol_class.as即让我们类与元件相关连..此时测试影片,你会看到与上例中相同的结果.这里注意一点,场景中仍要保证circle_mc的存在.因为在代码中我们并没有动态的贴加circle_mc. 同时这个例子中,与上例一样,我们并没有使用As3.0的Document Class特性.
动态类(dynamic class)
此种编写的类的方式与探索Actionscript3.0 flash9 Preview教程中的例子是一样的,此种方式是最最常用的.对于一些稍复杂的程序来说,是由主类和多个辅助类组成的.辅助类封装分割开的功能,主类用来显示和集成各部分功能。如上例我们已经封装了小球的拖动功能。现在我们想要创建100个这样可以拖动的小球。
如下演示:
思路是我们已经创建了封装了拖动功能的类,我们在创建一个主类,用来显示这100个具有拖动功能的小球,我们将使用As3.0的DocumnetClass 新特性.
如下:我们将主类命名为DocumentClass.as, 封装后的拖动球功能我们命名为Drag_class.as.
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.然后你就可以测试了。
不使用库元件的动态类(dynamic class with no library)
在上例中我们使用的是已创建好的影片剪辑,并在库中做了类的链接,这种情况对于一些有复杂图形的情况下是比较好的选择,如果你能很熟练的应用Drawing Api绘制出你想要的任意图形,那么你也可以不使用库元件,可以直接在类中编写,在本教程中我们主要研究的是这种方式,接下来我们看不使用库元件如何编写类来实现上面的功能。
很显然即然不使用库中的元件,那么我们就需要在类中直接使用Drawing Api来直接绘制。如下,类的结构与动态类是相同的。我们需要在上例的基础上做些改动
首先删去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;
测试你的影片。当然这里我们绘制的只是一个无渐变的红色园形。
Package Class
一般来说,一个.as文件中就一个类,但是在AS3中,现在允许在一个文件中定义多个类用来辅助主类。
在.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();
}
}
}
文章来源:
http://www.163ns.com
,转载请注明!
分享到:
复制地址
新浪微博
腾讯微博
QQ空间
开心网
人人网
百度空间
百度贴吧
网易微博
搜狐微博
上一篇:
如何用Flash实现飘雪效果
下一篇:
浅谈SWFObject
相关文章:
广告联盟中的CPA、CPS、CPC、CPM分别是什么意思
云时代世界观:谁能找到位置就能抢未来的钱
中科院公布H7N9禽流感病毒源
最多点击19次即可到达任意网页
FTP主动模式/被动模式两种工作模式对比
在线咨询
客服咨询
企业qq交谈
QQ:800009888
备案专员
企业qq交谈
QQ:973907313
域名专员
企业qq交谈
QQ:6584830
在线时间
8:00-17:40