您的位置:首页 > 服装鞋帽 > 男装 > 引用 AS3学习

引用 AS3学习

luyued 发布于 2011-01-04 19:56   浏览 N 次  

引用

edufox 的 AS3学习

一、基本概念

1. 什么是显示对象: Display Object,在舞台上的可视对象。

2.显示对象的种类划分: 一个是可以包含其他显示对象的显示对象容器,另一种就是单纯的

显示对象。打比方说: 树枝就是容器,树叶就是非容器。

显示对象容器:Sprite,MovieClip ; 显示对象: Shape,位图,文本框。

3. 显示对象的等级结构:

舞台-> 当前的SWF -> 可视对象(位图)、容器 -> 可视对象(位图)、容器 ->

4. 显示列表: 只有把显示对象放在显示列表当中才能显示出来, 显示对象不在显示列表中

时候它是存在的,但是不能显示出来。有了显示列表后可以利用层深来管理这些显示对象

5. 显示对象的种类: 显示对象都统一于 DisplayObject类

6. 显示对象的可视属性列表:

横坐标 x

纵坐标 y

宽度 width

高度 height

横向缩放比例 scaleX

纵向缩放比例 scaleY

顺时针旋转角度 rotation

透明度 alpha

可见性 visible

鼠标的相对坐标 mouseX ; mouseY

8. 显示对象的非可视属性列表:

显示对象的名字: name

父容器: parent

根对象: root

舞台: stage

遮罩: mask

二、 Graphics 对象

(一) 概念:

1. 所有的矢量图形的代码绘制都有Graphics类对象来实现的。

2. Graphics 不是显示对象类,只能由as3的内建的显示对象创建并调用。

as3的内建的显示对象包括:MociveClip,Sprite, Shape...

Shape 不是显示对象容器,它不支持鼠标单击事件,仅有graphics 属性。Shape 对象消耗的

内存相比之下最少。

Sprite 对象是显示对象容器, Sprite 对象支持鼠标单击事件 。

MovieClip 对象是显示对象容器。。。

(二) 绘制对象时候的遵循下面的顺序

设置线头样式 -> 填色 -> 移动绘图点 -> 画线 -> 或绘制图形 -> 结束填充。

其中 线头样式和填色是可选的,可以根据代码的需求取舍,但是这里顺序不能乱。

三、命令

0. 设置线头样式命令 lineStyle () 方法

lineStyle(thickness:Number, color:uint = 0, alpha:Number = 1.0,

pixelHinting:Boolean = false, scaleMode:String = "normal", caps:String = null,

joints:String = null, miterLimit:Number = 3):void

指定一种线条样式,直到使用不同的参数调用 lineStyle() 方法为止。 可以在绘制路径的中

间调用 lineStyle(),以便为路径中的不同线段指定不同的样式。

thickness:Number — 一个整数,以磅为单位表示线条的粗细;有效值为 0 到 255。 如果未

指定数字,或者未定义该参数,则不绘制线条。 如果传递的值小于 0,则默认值为 0。 值 0

表示极细的粗细;最大粗细为 255。 如果传递的值大于 255,则默认值为 255。

color:uint (default = 0 黑色) — 线条的十六进制颜色值。 可选。

alpha:Number (default = 1.0) — 表示线条颜色的 Alpha 值的数字;有效值为 0 到 1。

如果值大于 1,则默认值为 1。

1.填色命令 beginFill () 方法

beginFill(color:uint, alpha:Number = 1.0):void

指定一种简单的单一颜色填充。

注意在调用 endFill() 方法之前,Flash Player 不会呈现填充。

2. 移动绘图点命令 moveTo () 方法

moveTo(x:Number, y:Number):void

将当前绘画位置移动到 (x, y)。 如果缺少任何一个参数,则此方法将失败,并且当前绘画位

置不改变。

3. 画线命令 lineTo () 方法

public function lineTo(x:Number, y:Number):void

使用当前线条样式绘制一条从当前绘画位置开始到 (x, y) 结束的直线;当前绘画位置随后会

设置为 (x, y)。 如果在对 moveTo() 方法进行任何调用之前调用了 lineTo(),则当前绘画

的默认位置为 (0, 0)。 如果缺少任何一个参数,则此方法将失败,并且当前绘画位置不改变

4. 绘制图形命令

绘制一个圆 drawCircle () 方法

drawCircle(x:Number, y:Number, radius:Number):void

绘制一个矩形drawRect () 方法

drawRect(x:Number, y:Number, width:Number, height:Number):void

5. 结束填充命令 endFill () 方法

endFill():void

对从上一次调用 beginFill()方法之后添加的直线和曲线应用填充。

举例:

var circle:Shape=new Shape();

circle.graphics.beginFill(0xff0000,1);

circle.graphics.drawCircle(100,100,50);

circle.graphics.endFill();

addChild(circle);

画星星实例

package

{

import flash.display.Shape;

import flash.display.Graphics;

public class StarShap extends Shape

{

private var p:uint;

private var inR:Number;

private var outR:Number;

private var ang:Number;

private var col:uint;

public function StarShap(points:uint,inRadius:Number=20,outRadius:Number=50,angle:Number=0 )

{

p=points;

inR=inRadius;

outR=outRadius;

ang=angle;

col=Math.round(Math.random()*0x1000000);

star();

}

public function star()

{

this.graphics.lineStyle(0, 0x0000ff);

this.graphics.beginFill(col);

if (p>2) {

var step,halfStep,startat,dx,dy;

step=(Math.PI *2)/p;

halfStep=step/2;

startat=(ang/180)*Math.PI;

this.graphics.moveTo(Math.cos(startat)*outR,Math.sin(startat)*outR );

for (var n=0; n

dx=Math.cos(startat+step*n+ halfStep)*inR;

dy=Math.sin(startat+step*n+ halfStep)*inR;

this.graphics.lineTo(dx,dy);

dx=Math.cos(startat+step*n+step)*outR;

dy=Math.sin(startat+step*n+step)*outR;

this.graphics.lineTo(dx,dy);

}

}

this.graphics.endFill();

}

}

}

-- 作者:网络心情

-- 发布时间:2008-2-25 11:10:00

--

第二讲 遮罩

一、遮罩

遮罩是显示对象的mask属性: mask:DisplayObject [read-write]

假设显示对象B用作遮罩,显示对象A被遮罩则:

DisplayObjectA.mask=DisplayObjectB

取消遮罩:

DisplayObjectA.mask=null

二、拖拽命令

1.拖拽命令

startDrag () 方法

startDrag(lockCenter:Boolean = false, bounds:Rectangle = null):void

2.停止拖拽命令

stopDrag () 方法

三、滤镜使用方法:

1.,命令:

模糊滤镜 BlurFilter ()

BlurFilter(blurX:Number = 4.0, blurY:Number = 4.0, quality:int = 1)

其中参数意义:

blurX:Number (default = 4.0) — 水平模糊量。 有效值为 0 到 255.0(浮点值)。

blurY:Number (default = 4.0) — 垂直模糊量。 有效值为 0 到 255.0(浮点值)。

quality:int (default = 1) — 应用滤镜的次数。 您可以使用 BitmapFilterQuality 常数

来指定品质:

2.滤镜使用方法

方法一:

第一步:创建 BlurFilter 实例;第二步:创建滤镜数组,通过将滤镜作为参数传递给 Array() 构造函数,第三步: 将该滤镜添加到数组中。

var blur:BlurFilter = new BlurFilter();

var filtersArray:Array = new Array(blur);

myDisplayObject.filters = filtersArray;

或者用下边简单的方法实现:

myDisplayObject.filters = [new BlurFilter()];

四、遮罩实例

1. 在帧上如何实现;

2. 把遮罩实例写成文档类,或者自定义类

请同学们准备好一张喜欢的图片,并且把它转换为一个影片剪辑。在库里链接上类名:Shop

帧上代码:

var mask_mc:Sprite=new Sprite();

mask_mc.graphics.beginFill(0xff0000);

mask_mc.graphics.drawCircle(0,0,60);

mask_mc.graphics.endFill();

addChild(mask_mc);

mask_mc.x=200;

mask_mc.y=200;

var shop_mc:Shop=new Shop();

addChild(shop_mc);

shop_mc.mask=mask_mc;

var n:uint=0;

shop_mc.buttonMode =true;

mask_mc.filters=[new BlurFilter(10,10,3)];

shop_mc.cacheAsBitmap=true;

stage.addEventListener(MouseEvent.MOUSE_DOWN, startDhandler);

stage.addEventListener(MouseEvent.MOUSE_UP, stopDhandler);

stage.addEventListener( KeyboardEvent.KEY_DOWN ,keyhandler);

function startDhandler(e:MouseEvent )

{

mask_mc.startDrag(true);

}

function stopDhandler(e:MouseEvent )

{

mask_mc.stopDrag();

}

function keyhandler(e:KeyboardEvent)

{

n++;

if (e.keyCode==68 && n%2==1 ) {

shop_mc.mask=null;

} else {

shop_mc.mask=mask_mc;

}

}

[此贴子已经被作者于2008-3-2 9:33:19编辑过]

-- 作者:网络心情

-- 发布时间:2008-2-25 11:11:00

--

碰撞检测

一、基本命令

包 flash.display

类 public class DisplayObject

继承 DisplayObject -> EventDispatcher -> Object

1. hitTestObject () 方法

hitTestObject( obj:DisplayObject ):Boolean

计算显示对象,以确定它是否与 obj 显示对象重叠或相交。

参数: obj:DisplayObject — 要测试的显示对象。

返回: Boolean — 如果显示对象相交,则为 true;否则为 false。

注意: 是以对象实体的最大的矩形来检测是否发生了碰撞的。

2. hitTestPoint () 方法

hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean

计算显示对象,以确定它是否与 x 和 y 参数指定的点重叠或相交。 x 和 y 参数指定舞台的

坐标空间中的点,而不是包含显示对象的显示对象容器中的点(除非显示对象容器是舞台)。

参数:

x:Number — 要测试的此对象的 x 坐标;

y:Number — 要测试的此对象的 y 坐标。

shapeFlag:Boolean (default = false) — 是检查对象 (true) 的实际像素,还是检查边框

(false) 的实际像素。

返回: Boolean — 如果显示对象与指定的点重叠或相交,则为 true;否则为 false。

注意: 是以点来检测是否发生了碰撞的。

3. hitTest () 方法

包 flash.display

类 public class BitmapData

继承 BitmapData Object

hitTest( firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean

在一个位图图像与一个点、矩形或其它位图图像之间执行像素级的点击检测。 在执行点击测试时,将不会考虑两个对象中任何一个对象的拉伸、旋转或其它变形。

如果某个图像是不透明图像,则此方法会将其视为完全不透明的矩形。 两个图像必须是透明图像才能执行判断透明度的像素级点击测试。 当您在测试两个透明图像时,Alpha 阈值参数将控制哪些 Alpha 通道值(从 0 到 255)将被视为是不透明的。

参数:

firstPoint:Point — 任意坐标空间中 BitmapData 图像的左上角的位置。 在定义 secondBitmapPoint 参数时,使用了相同的坐标空间。

firstAlphaThreshold:uint — 最大的 Alpha 通道值,此点击测试将其视为不透明的。

secondObject:Object — 一个 Rectangle、Point、Bitmap 或 BitmapData 对象。

secondBitmapDataPoint:Point (default = null) — 一个点,用于定义第二个 BitmapData 对象中的一个像素位置。 仅当 secondObject 的值是 BitmapData 对象时使用此参数。

secondAlphaThreshold:uint (default = 1) — 最大的 Alpha 通道值,它在第二个 BitmapData 对象中被视为不透明的。 仅当 secondObject 的值是 BitmapData 对象,并且这两个 BitmapData 对象都为透明时使用此参数。

返回: Boolean — 如果发生点击,则值为 true;否则为 false。

二、类文件

首先感谢小白龙老师,经过他的修改后完成这个实例

在库里有两个元件,做一个雪花影片剪辑,它绑定了Snow类,另一个影片剪辑实例名字是 xin

package

{

import flash.display.MovieClip;

import flash.events.Event;

import flash.events.TimerEvent;

import flash.utils.Timer;

public class Snow extends MovieClip

{

private var _speedy:Number;

private var _speedx:Number;

private var lastTime:Number=0;

private var passTime:Number=0;

private var _xin:MovieClip;

private var n:uint=0;

public function Snow(xin:MovieClip)

{

_xin=xin;

init();

snowMove();

}

private function init()

{

this.scaleX=this.scaleY=Math.random();

_speedy=Math.random()*5+1;

_speedx=Math.random()*2-2;

x=Math.random()*550 ;

y=-Math.random()*20-5 ;

}

private function snowMove()

{

this.addEventListener(Event.ENTER_FRAME, moving);

}

private function moving(e:Event)

{

this.y +=_speedy;

this.x += Math.sin(this.y /5);

n++;

if ( Math.random()* (n%10)< 1) {

if ( _xin.hitTestPoint(this.x,this.y,true) ) {

removeEventListener(Event.ENTER_FRAME, moving);

var time:Timer=new Timer(10000,1);

time.addEventListener(TimerEvent.TIMER_COMPLETE,deleteSnow);

time.start();

}

}

if (this.y>410) {

removeMoving( );

}

}

private function removeMoving( )

{

removeEventListener(Event.ENTER_FRAME, moving);

parent.removeChild(this);

}

private function deleteSnow(evt:TimerEvent)

{

this.play();

}

}

}

帧上代码:

var time:Timer=new Timer(100,0);

time.addEventListener(TimerEvent.TIMER,nnn);

time.start();

function nnn(e:TimerEvent)

{

for (var i:uint=0; i<5; i++) {

var snower:Snow=new Snow(xin);

addChild(snower);

}

}

三、理解 hitTest

创建2个影片剪辑: mc1 是一个一帧的上边随便画一个图形; mc2是2帧动画,第一帧第二帧上是同一个图形,就是颜色变化一下。通过下边这个例子体验一下hitTest命令!

mc1.buttonMode = true;

mc1.addEventListener(MouseEvent.MOUSE_DOWN, mousedownHandler);

mc2.gotoAndStop(1);

var bmd1 = new BitmapData(mc1.width, mc1.height, true, 0);

bmd1.draw(mc1);

var bmd2 = new BitmapData(mc2.width, mc2.height, true, 0);

bmd2.draw(mc2);

function mousedownHandler(e)

{

mc1.startDrag( );

stage.addEventListener(MouseEvent.MOUSE_MOVE, mousemoveHandler);

stage.addEventListener(MouseEvent.MOUSE_UP, mouseupHandler);

}

function mousemoveHandler(e)

{

mc1.startDrag( );

if (bmd1.hitTest(new Point(mc1.x, mc1.y), 0x55, bmd2, new Point(mc2.x, mc2.y))) {

mc2.gotoAndStop(2);

} else {

mc2.gotoAndStop(1);

}

}

function mouseupHandler(e)

{

stage.removeEventListener(MouseEvent.MOUSE_MOVE, mousemoveHandler);

stage.removeEventListener(MouseEvent.MOUSE_UP, mouseupHandler);

mc1.stopDrag( );

}

[此贴子已经被作者于2008-3-8 3:07:10编辑过]

-- 作者:网络心情

-- 发布时间:2008-2-25 11:11:00

--

一、熟悉相关命令

(1)Bitmap 类

表示用于表示位图图像的显示对象。 这些图像可以是使用 flash.display.Loader 类加载的图像,也可以是使用 Bitmap() 构造函数创建的图像。

利用 Bitmap() 构造函数,可以创建包含对 BitmapData 对象的引用的 Bitmap 对象。 创建了 Bitmap 对象后,使用父 DisplayObjectContainer 实例的 addChild() 或 addChildAt() 方法将位图放在显示列表中。

Bitmap构造函数: 初始化 Bitmap 对象以引用指定的 BitmapData 对象。

Bitmap(bitmapData:BitmapData = null, pixelSnapping:String = "auto", smoothing:Boolean = false)

参数

bitmapData:BitmapData (default = null) — 被引用的 BitmapData 对象。

pixelSnapping:String (default = "auto") — Bitmap 对象是否贴紧至最近的像素。

smoothing:Boolean (default = false) — 在缩放时是否对位图进行平滑处理。

广告赞助商