引用 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
{
imp
ort flash.display.Shape; imp
ort 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
{
imp
ort flash.display.MovieClip; imp
ort flash.events.Event; imp
ort flash.events.TimerEvent; imp
ort 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) — 在缩放时是否对位图进行平滑处理。
上一篇:转让二手帕尼智能有线电视增台器PN-26-二手交易就上舍得网! 下一篇:犹太人教育相关资讯
- 07-01· 北凉国的那些事(组诗)
- 07-01· 《乱世佛音》 第七章 巨变
- 07-01· 南匈奴始末(3)
- 06-30· 流浪在波希米尼亚
- 06-30· 希尼亚从大洋西岸放飞新
- 06-28· 瑪利亞之城 - 家庭日 "光
- 06-28· 至青年营弟兄姐妹的一封
- 06-26· 《三国群英大富翁》追忆
- 06-24· 东莞血汗工厂实录(281:沙田
- 06-22· 第一次看戏
最新资讯
- 06-22· 经典复刻,独一无二:试
- 06-22· 蓝旗营教学中心9月份盛大
- 06-22· 品牌折扣女装嫣然品牌折
- 06-21· IQVopdnkvdz 1100
- 06-21· kriyoylto8fyds'p;tyijyfuifiogoi
- 06-21· 巴黎春天缤纷圣诞 喜迎新
- 06-21· 晒JS宝宝贝贝些 咯
- 06-21· 司马氏的谥法和葬仪
- 06-21· [转载]司马氏的谥法和葬仪
- 06-21· 闲来蓟县看秋山