`
zccst
  • 浏览: 3292581 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

显示对象 DisplayObject

阅读更多
作者:zccst

显示对象  DisplayObject

DisplayObject类是所有显示对象的父类,该类归纳总结了一些显示对象共有的特性,这些共有的特性被整理成为一些列的属性与方法。

1,显示对象的基本概念
(1)属性
上面四幅图中中展示了显示对象中比较基础也是很常用的可视属性,下面列表是显示对象的全部可视属性。

alpha:透明度   
width:宽度    height:高度
x:X轴坐标值  y:Y轴坐标值

rotation:旋转角度
scaleX:横向缩放
scaleY:纵向缩放
skewX:横向斜切
skewY:纵向斜切
visible:是否可见

此外,还有锚点的位置属性
anchorX  对象沿x方向的对齐
anchorY  对象沿y方向的对齐
取值范围是0.0-1.0.其中0.0表示从对象的最左对齐,0.5表示从对象的中间对齐,1.0表示从对象的最右对齐
例如:
var textContainer:egret.Sprite = new egret.Sprite();
textContainer.anchorX = textContainer.anchorY = 0.5;
一篇文章:http://coronalabs.com/blog/2013/10/15/tutorial-anchor-points-in-graphics-2-0/

(2)方法




2,Egret中的显示对象类DisplayObject拥有四个派生类,分别为:Bitmap、Shape、TextField、TextInput 这四个派生类实现了不同的功能

Bitmap进行位图显示和操作,可以在位图纹理部分查阅相关技术细节。
Shape是可以进行矢量图绘制的显示对象,可以在适量绘图部分查阅相关技术细节。
TextField 和 TextInput都属于文本操作,可以在文本部分查阅相关技术细节。







3,遮罩是游戏中非常常用的一种视觉处理手段。例如,游戏中滚动的玩家列表就使用了遮罩这一技术。所谓遮罩就是指定一个显示对象哪些部分可以显示,哪些部分不可以显示。

Egret启用遮罩功能非常的简单,在DisplayObject中,我们暴露了一个名称为 mask 的属性,该属性就是用来指定遮罩部分的。

下面一个示例中绘制了两个Shape对象,我们对其中一个Shape使用遮罩,另外一个Shape当做参考。

//绘制了一个矢量图,矩形,( 0,0,100,100)
11         var shp:egret.Shape = new egret.Shape();
12         shp.graphics.beginFill( 0xff0000 );
13         shp.graphics.drawRect( 0,0,100,100);
14         shp.graphics.endFill();
15         this.addChild( shp );

//给改矩形添加了一个遮罩,遮罩也是一个对象
1 var rect:egret.Rectangle = new egret.Rectangle(20,20,30,50);//api中的矩形类,直接初始化
2 shp.mask = rect;





4,碰撞检测在游戏中是非常重要的功能,例如我们制作一款打飞机游戏,当子弹与飞机发生碰撞的时候我们可以认为游戏结束。此时碰撞的过程需要进行碰撞检测操作。

在Egret中,我们提供了碰撞检测的功能,同时该功能提供两种不同的碰撞检测方式。

第一种检测方法:检测图与点是否碰撞
shp.hitTestPoint( 10, 10 );

      {
   this.drawText();
12
13         var shp:egret.Shape = new egret.Shape();
14         shp.graphics.beginFill( 0xff0000 );
15         shp.graphics.drawRect( 0,0,100,100);
16         shp.graphics.endFill();
17         shp.width = 100;
18         shp.height = 100;
19         this.addChild( shp );

20    //检测shp这个矢量图,与点(10,10)是否有交集
21         var isHit:boolean = shp.hitTestPoint( 10, 10 );
   //更新infoText的值
22         this.infoText.text = "碰撞结果" + isHit;
23
24     }

25     //定义一个变量infoText,用来显示文本信息
26     private infoText:egret.TextField;
27     private drawText()
28     {
29         this.infoText = new egret.TextField();
30         this.infoText.y = 200;
31         this.infoText.text = "碰撞结果";
32         this.addChild( this.infoText );
33     }

第二种检测方法:但如果我们想更加精确的检测图像是否与一个点发生了碰撞,我们需要将第三个参数设置为 true。
shp.hitTestPoint( 10, 10 );

1 var shp:egret.Shape = new egret.Shape();
2 shp.graphics.beginFill( 0xff0000 );
3 shp.graphics.drawRect( 0,0,100,100);
4 shp.graphics.endFill();
5 shp.width = 100;
6 shp.height = 100;
7 this.addChild( shp );
8
9 var isHit:boolean = shp.hitTestPoint( 10, 10, true );
10 this.infoText.text = "碰撞结果" + isHit;


我们稍微修改一下代码,将原来宽高为100的正方形修改为一个半径为20的圆形。代码如下:

1 var shp:egret.Shape = new egret.Shape();
2 shp.graphics.beginFill( 0xff0000 );
3 shp.graphics.drawCircle( 0, 0, 20);//注意坐标,可见区域只有四分之一圆
4 shp.graphics.endFill();
5 shp.width = 100; //有什么用呢
6 shp.height = 100;//有什么用呢
7 this.addChild( shp );
8
9 var isHit:boolean = shp.hitTestPoint( 25, 25, true );
10 this.infoText.text = "碰撞结果" + isHit;


5,创建自己的显示对象类
自定义显示对象类需要继承自DisplayObject的具体子类,例如Shape或者TextField。

下面我们来创建一个自己的显示对象。我们把这个显示对象称之为 MyGrid 。

创建一个名称为 MyGrid 的类,并且继承自 Shape 。具体代码如下:

1 class MyGrid extends egret.Shape
2 {
3     public constructor()
4     {
5         super();
6         this.drawGrid();
7     }
8
9     private drawGrid()
10     {
11         this.graphics.beginFill( 0x0000ff );
12         this.graphics.drawRect( 0, 0, 50,50 );  //矩形1
13         this.graphics.drawRect( 50, 50, 50, 50);//矩形4
14         this.graphics.beginFill( 0xff0000 );
15         this.graphics.drawRect( 50, 0, 50,50 );//矩形2
16         this.graphics.drawRect( 0, 50, 50,50 );//矩形3
17         this.graphics.endFill();
18     }
19 }
在 MyGrid 我们绘制了一个红蓝相间的2*2格子,然后我们创建一个新的文档类,名称为 GridMain ,在文档类中创建并显示我们的 MyGrid,具体代码如下:

1 class GridMain extends egret.DisplayObjectContainer
2 {
3     public constructor()
4     {
5         super();
6         this.addEventListener(egret.Event.ADDED_TO_STAGE,this.onAddToStage,this);
7     }
8
9     private onAddToStage(event:egret.Event)
10     {
11         var _myGrid:MyGrid = new MyGrid();
12         this.addChild( _myGrid );
13     }
14 }
编写保存后,在 egretProperties.json 文件中将文档类改为 GridMain,编译并测试,你会在浏览器中看到如下图效果。


如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
评论

相关推荐

    基于C++ 设计的捕鱼游戏

    显示对象DisplayObject.h的封装 精灵对象sprite.h的封装 场景类action.h的封装 计时器对象ticker.h的封装 窗口对象DemoApp.h的说明 消息映射和流程触发结构 createBefore.h 子弹对象bullet.h的封装 鱼类fish.h的封装...

    [心得] AS3)灰化显示对象(DisplayObject)的方法 / 图片灰化

    NULL 博文链接:https://as3.iteye.com/blog/1168070

    pixi-mousewheel:pixi.js插件,可在显示对象上启用鼠标滚轮事件

    pixi.js的此插件会自动为pixi显示对象调度鼠标滚轮滚动事件。 它仅针对具有交互性并设置了特殊标志的对象触发事件。 当滚动所述显示对象时,默认文档滚动被阻止。 此外,它还标准化了鼠标滚轮增量,以实现跨浏览器的...

    xrope:原生 as3 显示对象的简单布局库

    Xrope:用于原生 as3 显示对象的简单布局库。 特征 对于原生 as3 显示对象。 没有 Flex 或任何其他依赖项。 AtomLayout 使用getBounds()对齐 DisplayObject。 不用担心FLA 中的注册点。 (将useBounds设置为true ,...

    开发Flash网络游戏需要掌握的技术

    开发Flash网络游戏需要掌握的技术,一个游戏离不开显示,AS3已经...学习这个部分,学习显示列表,学习DisplayObject和DisplayObjectContainer的区别,学习Shape, Sprite, MovieClip, Bitmap这些基本可显示对象的区别。

    blitting as3

    许多类型的游戏,用户体验都依赖于终端可拥有的屏幕像素和移动物体有多快。...Flash Player必须遍历显示对象树并为每个基于向量的DisplayObject计算渲染输出,这样会消耗CPU周期成为真正的瓶颈,尤其是低端机。

    actionscript_blitting.zip

    利用AS3块传输技术呈现游戏元素:许多类型的游戏,用户体验都依赖于终端可拥有的...Flash Player必须遍历显示对象树并为每个基于向量的DisplayObject计算渲染输出,这样会消耗CPU周期成为真正的瓶颈,尤其是低端机。

    ACTION3.0语言组件参考

    ACTION语言组建参考。... 此显示对象的当前辅助功能选项。 AccessibilityProperties — Class in package flash.accessibility 利用 AccessibilityProperties 类可控制 Flash 对象辅助功能(如屏幕阅读器)演示。 ...

    fixjs_src_0.2.0

    fixjs.Object:提供对象初始化,释放控制,克隆接口 fixjs.DisposeUtil:释放资源工具类 fixjs.CloneUtil:克隆资源工具类 fixjs.Map:哈希数据结构 【事件处理】 fixjs.events.Event:事件类 fixjs.events....

    magnet:Corona SDK Graphics 2.0的位置帮助器

    用于将显示对象放置在不同屏幕分辨率上的模块。 该帮助程序仅适用于最新版本的Corona(aka 2.0)。 内部对锚定和屏幕方向进行管理以提供一致性。 近期变动: 故事板已替换为Composer API 刷新的build.settings...

    egame:egame是一个使用ecojs开发的轻量级、模块化、易于扩展的2d canvas渲染的h5游戏引擎

    显示对象和显示容器(Container,DisplayObject) 精灵、精灵表、文字、图形、平铺精灵(Sprite,SpriteSheet,Text,Graphics,TilingSprite) 精灵动画(SpriteSheetAnimation) 组(Group) 补间动画(Tween) 粒子效果(Particle...

    as3 滚动条 AsScroolBar 水平垂直

    给可视对象添加滚动条 new AsScroolBar()加入显示列表 AsScroolBar(_controlUI:DisplayObject,_scrollWidth:int,_scrollHeight:int,_stepNum:int=20)

    plum:[未维护] 基于曲线的 ActionScript 3 动画库

    李子 ... speed (uint) :这是您的显示对象移动的速度。 您必须发送舞台 fps 以使其精确(每秒像素数) (默认值:100) fps (uint) : Stage FPS,用于计算速度。 (默认:24) start (uint) : 以

Global site tag (gtag.js) - Google Analytics