1.JS调用AS3中的函数
首先,我们新建一个FLASH文档,然后在舞台上绘制一个动态文本,该文本的实例名称为wen_txt。好了!美工的部分就算完成了(我们这里是一个非常简单的实例,不要求太复杂。力求突出重点)!
现在,我们要在FLASH中建立一个允许被外部调用的函数。那么如何去建立声明这样一个函数呢?我们要使用到一个类,这个类的名字就是ExternalInterface。很多人都没有太注意过这个类。这个类实际上是在flash.external 包中。这个包是专门用来和外部容器进行通信的。那么对这个ExternalInterface类,它的官方解释是“ExternalInterface 类是外部 API,在 ActionScript 和 Flash Player 的容器之间实现直接通讯的应用程序编程接口,例如,含有 JavaScript 的 HTML 页。”很显然,这里已经提到了JS。好了!下面我们就来写一下脚本吧!
代码如下:
……
在 ActionScript 3.0 中,SWF 文件是使用 Loader 类来加载的。若要加载外部 SWF 文件,
ActionScript 需要执行以下 4 个操作:
1. 用文件的 URL 创建一个新的 URLRequest 对象。
2. 创建一个新的 Loader 对象。
3. 调用 Loader 对象的 load() 方法,并以参数形式传递 URLRequest 实例。
4. 对显示对象容器 (如 Flash 文档的主时间轴)调用 addChild() 方法,将 Loader 实例添加到显示列表中。
示例代码:
1 2 3 4 5 | var request:URLRequest = new URLRequest("http://design-studio.cn/ blog/wp-content/uploads/2010/02/generateur_avatars.swf"); var loader:Loader = new Loader(); loader.load(request); addChild(loader); |
1、as3ebaylib
http://code.google.com/p/as3ebaylib/
2、as3youtubelib
http://code.google.com/p/as3youtubelib/
3、as3flickrlib
http://code.google.com/p/as3flickrlib/
4、Yahoo ASTRA Flash Components
http://developer.yahoo.com/flash/astra-flash/
5、facebook-as3
http://code.google.com/p/facebook-as3/
6、as3awss3lib
http://code.google.com/p/as3awss3lib/
……
总结:调用库中MC,BTN,外部PIC,SWF,TXT,XML。简单AS3绘图,简单的变量调整。继续学习,继续加油…
示例代码下载
……
[SWF(width="800", height="600", backgroundColor="#fffff", frameRate="31")] //定义场景
import flash.display.Stage;//表示场景类
import flash.display.StageScaleMode;//调整大小场景类,常用有NO_SCALE跟据场景大小来调整自适应大小
import flash.display.StageAlign;//调整对齐场景类
import flash.display.StageDisplayState//调整场景是否全屏
import flash.events.FullScreenEvent;//用于侦听”调整场景是否全屏”
StageScaleMode.EXACT_FIT 按比例缩放 SWF。
StageScaleMode.SHOW_ALL 确定是否显示边框(就像在标准电视上观看宽屏电影时显示的黑条)。
StageScaleMode.NO_BORDER 确定是否可以部分裁切内容。
StageScaleMode.NO_SCALE,则当查看者调整 Flash Player 窗口大小时,舞台内容将保持定义的大小。
swfStage.addEventListener(Event.RESIZE, resizeDisplay);
mySprite.stage.displayState = StageDisplayState.FULL_SCREEN;//全屏
mySprite.stage.displayState = StageDisplayState.NORMAL;//退出全屏
mySprite.stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenRedraw);
swfStage.align = StageAlign.TOP_LEFT;//左上角对齐
swfStage.align = StageAlign.TOP_RIGHT;//右上角对齐
swfStage.align = StageAlign.TOP;//顶对齐
swfStage.align = StageAlign.RIGHT;//右对齐
swfStage.align = StageAlign.LEFT;//左对齐
swfStage.align = StageAlign.BOTTOM;//底对齐
swfStage.align = StageAlign.BOTTOM_LEFT;//左下角对齐
swfStage.align = StageAlign.BOTTOM_RIGHT;//右下角对齐
示例代码:
……
下面的例子演示遮罩跟随鼠标移动。通过载入的图片指定遮罩,该遮罩跟着鼠标移动:
1 2 3 4 5 6 7 8 9 10 11 | var loader:Loader = new Loader( ); loader.load(new URLRequest("image.jpg")); addChild(loader); var maskSprite:Sprite = new Sprite( ); maskSprite.graphics.lineStyle( ); maskSprite.graphics.beginFill(0xFFFFFF); maskSprite.graphics.drawCircle(0, 0, 50); maskSprite.graphics.endFill( ); loader.mask = maskSprite; addChild(maskSprite); maskSprite.startDrag(true); |
下面的例子通过URL载入位图,拷贝到BitmapData对象上,使用BitmapData对象填充圆:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | package { import flash.display.Sprite; import flash.geom.Matrix; import flash.display.Loader; import flash.net.URLRequest; import flash.display.BitmapData; import flash.events.Event; public class Drawing extends Sprite { private var _loader:Loader; public function Drawing( ) { _loader = new Loader( ); _loader.load(new URLRequest("image.jpg")); _loader.contentLoaderInfo.addEventListener (Event.COMPLETE, onImageLoad); } private function onImageLoad(event:Event):void { var bitmap:BitmapData = new BitmapData (_loader.width, _loader.height); bitmap.draw(_loader, new Matrix( )); var matrix:Matrix = new Matrix( ); matrix.scale(.1, .1); var sampleSprite:Sprite = new Sprite( ); sampleSprite.graphics.lineStyle( ); sampleSprite.graphics.beginBitmapFill(bitmap, matrix); sampleSprite.graphics.drawCircle(100, 100, 100); sampleSprite.graphics.endFill( ); addChild(sampleSprite); } } } |
下面的代码使用这些方法建立了简单的拖动效果。有三个不同颜色的矩形,右边有个白色的矩形作为拖动的目标,当拖动左边的矩形到白色矩形上时,松开鼠标,白色矩形就会i改变相应颜色。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | package { import flash.display.Sprite; import flash.display.DisplayObject; import flash.events.MouseEvent; import flash.geom.Point; import flash.filters.DropShadowFilter; public class ColorDrop extends Sprite { private var _red:Sprite; private var _green:Sprite; private var _blue:Sprite; private var _white:Sprite; // 保存被拖动对象原始坐标 private var startingLocation:Point; // 创建矩形和添加事件 public function ColorDrop( ) { createRectangles( ); addEventListeners( ); } private function createRectangles( ):void { _red = new Sprite( ); _red.graphics.beginFill( 0xFF0000 ); _red.graphics.drawRect( 0, 10, 10, 10 ); _red.graphics.endFill( ); _green = new Sprite( ); _green.graphics.beginFill( 0x00FF00 ); _green.graphics.drawRect( 0, 30, 10, 10 ); _green.graphics.endFill( ); _blue = new Sprite( ); _blue.graphics.beginFill( 0x0000FF ); _blue.graphics.drawRect( 0, 50, 10, 10 ); _blue.graphics.endFill( ); _white = new Sprite( ); _white.graphics.beginFill( 0xFFFFFF ); _white.graphics.drawRect( 20, 10, 50, 50 ); _white.graphics.endFill( ); addChild( _red ); addChild( _green ); addChild( _blue ); addChild( _white ); } private function addEventListeners( ):void { _red.addEventListener( MouseEvent.MOUSE_DOWN, pickup ); _red.addEventListener( MouseEvent.MOUSE_UP, place ); _green.addEventListener( MouseEvent.MOUSE_DOWN, pickup ); _green.addEventListener( MouseEvent.MOUSE_UP, place ); _blue.addEventListener( MouseEvent.MOUSE_DOWN, pickup ); _blue.addEventListener( MouseEvent.MOUSE_UP, place ); } public function pickup( event:MouseEvent ):void { // 保存原始坐标以便回位 startingLocation = new Point( ); startingLocation.x = event.target.x; startingLocation.y = event.target.y; //开始拖动,给被拖动对象加上阴影 event.target.startDrag( ); event.target.filters = [ new DropShadowFilter( ) ]; // 把被拖动对象显示在最前面 setChildIndex( DisplayObject( event.target ), numChildren - 1 ); } public function place( event:MouseEvent ):void { // 停止拖动,取消阴影效果 event.target.stopDrag( ); event.target.filters = null; // 检测是否已经被拖动到白色矩形上 if (event.target.dropTarget==_white) { // 设置颜色 var color:uint; switch (event.target) { case _red : color = 0xFF0000; break; case _green : color = 0x00FF00; break; case _blue : color = 0x0000FF; break; } _white.graphics.clear( ); _white.graphics.beginFill( color ); _white.graphics.drawRect( 20, 10, 50, 50 ); _white.graphics.endFill( ); } // 把被拖动对象放回原位 event.target.x = startingLocation.x; event.target.y = startingLocation.y; } } } |
下面的完整例子通过一个绘图程序演示了各种鼠标事件,无论何时鼠标按下,绘图将立即开始,当移动鼠标,一条线跟着鼠标显示出来,当松开鼠标,绘图终止:
例子代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package { import flash.display.Sprite; import flash.events.MouseEvent; public class DrawingDemo extends Sprite { // Flag to indicate whether the mouse is in draw mode private var _drawing:Boolean; public function DrawingDemo( ) {// 设置线条样式 graphics.lineStyle( 2, 0xFF0000 ); // 按住鼠标就绘图 _drawing = false; // 监听鼠标事件 stage.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing ); stage.addEventListener( MouseEvent.MOUSE_MOVE, draw ); stage.addEventListener( MouseEvent.MOUSE_UP, stopDrawing ); } public function startDrawing( event:MouseEvent ):void { // 绘制起点 graphics.moveTo( mouseX, mouseY ); _drawing = true; } public function draw( event:MouseEvent ):void { if (_drawing) { // 鼠标走到哪画到哪 graphics.lineTo( mouseX, mouseY ); } } public function stopDrawing( event:MouseEvent ):void { _drawing = false; } } } |
摘自:ActionScript 3.0 Cookbook
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package { import flash.display.*; import flash.net.URLRequest; public class LoaderExample extends Sprite { public function LoaderExample() { // 1. 创建Loader 类实例 var loader:Loader=new Loader ; // 2. 添加到可视化对象列表 addChild(loader); // 3. 调用load( )方法 loader.load(new URLRequest("image.jpg")); } } } |