Egret 矢量绘图、遮罩、碰撞检测
矢量绘图:
1. 为矢量绘图绘制外边 - graphics.lineStype()
private createGameScene():void
{
console.log("Runtime start."); var myShape:egret.Shape = new egret.Shape(); myShape.graphics.lineStyle(10, 0x00ff00, 1);
myShape.graphics.beginFill(0xff0000, 1);
myShape.graphics.drawRect(0,0,100,200);
myShape.graphics.endFill();
this.addChild(myShape); console.log("Runtime end.");
}
2. 清空一个显示对象的绘图 - graphics.clear()
3. 绘制圆形 - graphics.drawCircle(0, 0, 50)
4. 画直线:
private createGameScene():void
{
var myShape:egret.Shape = new egret.Shape();
myShape.graphics.lineStyle(5, 0x00ff00, 1);
myShape.graphics.moveTo(50, 10); //将画笔移动到起点位置
myShape.graphics.lineTo(100, 20); //从起点位置划线到终点
myShape.graphics.endFill();
this.addChild(myShape);
}
5. 贝塞尔曲线:
private createGameScene():void
{
var myShape:egret.Shape = new egret.Shape();
myShape.graphics.lineStyle(5, 0x00ff00, 1);
myShape.graphics.moveTo(50, 200); //将画笔移动到起点位置
myShape.graphics.curveTo(150, 50, 250, 200); //指定起始移动方向的交汇点坐标,与终点坐标后进行画线
myShape.graphics.endFill();
this.addChild(myShape);
}
6. 绘制圆弧:
private createGameScene():void
{
var myShape:egret.Shape = new egret.Shape();
myShape.graphics.lineStyle(5, 0x00ff00, 1);
myShape.graphics.beginFill(0x1122cc);
//圆心坐标、半径、起始弧度、终止弧度,填充的区域是圆弧+圆弧两端点的连接所包含的区域
myShape.graphics.drawArc(200,200,100,Math.PI/3, Math.PI);
myShape.graphics.endFill();
this.addChild(myShape);
}
7. 值得注意的是:graphic 可以用来绘制多个图形,不用一个 graphic 对应一个图形。
遮罩
1. 矩形遮罩:
private createGameScene():void
{
var shp: egret.Shape = new egret.Shape();
shp.graphics.beginFill(0xff0000);
shp.graphics.drawRect(0,0,100,100);
shp.graphics.endFill();
this.addChild(shp); var shp2: egret.Shape = new egret.Shape();
shp2.graphics.beginFill(0x00ff00);
shp2.graphics.drawCircle(0,0,20);
shp2.graphics.endFill();
this.addChild(shp2);
shp2.x = 20;
shp2.y = 20; var rect: egret.Rectangle = new egret.Rectangle(20,20,30,50); //参数指定的区域是遮罩不遮挡的区域
shp.mask = rect;
}
2. 对象遮罩:可以用一个对象当成另一个对象的遮罩
square.mask = circle; //像这样直接指定即可
碰撞检测
private createGameScene():void {
var infoTest = new egret.TextField();
infoTest.y = 200;
infoTest.text = "碰撞结果";
this.addChild(infoTest); //显示一个文本以展示测试结果
var shp:egret.Shape = new egret.Shape();
shp.graphics.beginFill(0xff0000);
shp.graphics.drawRect(0, 0, 120, 120);
shp.graphics.endFill();
this.addChild(shp);
console.log(shp.width); //shp 的 width 与 height 与显示对线的内容相关,这里是 120
console.log(shp.height);
var testPoint = new egret.Shape();
testPoint.graphics.beginFill(0x000000);
testPoint.graphics.drawRect(100, 100, 5, 5); //标记一个黑色的边界点
testPoint.graphics.endFill();
this.addChild(testPoint);
var isHit:boolean = shp.hitTestPoint(110, 110); //结论:是否碰撞与 shp.graphics 相关,而与 shp.width/height 无关
infoTest.text = "碰撞结果" + isHit; //就算已经 addchild,可以直接修改文本, 结果是 true
shp.graphics.clear(); //如果不clear, 重新 drawRect 不会生效
shp.graphics.beginFill(0xff0000);
shp.graphics.drawRect(0, 0, 100, 100);
shp.graphics.endFill();
var isHit:boolean = shp.hitTestPoint(110, 110);
infoTest.text = "碰撞结果" + isHit; //结果是 false
}
值得注意的是,精确坐标的碰撞检测是非常消耗性能的,尽量少用。
Egret 矢量绘图、遮罩、碰撞检测的更多相关文章
- Egret引擎随学随机
1.纹理集实际上就是将一些零碎的小图放到一张大图当中.游戏中也经常使用到纹理集.使用纹理集的好处很多,我们通过将大量的图片拼合为一张图片从而减少网络请求,原先加载数次的图片资源现在加载一次即可.同时, ...
- 圆形CD绘制 (扇形)
参考: Egret教程Arc是使用示例:http://edn.egret.com/cn/article/index/id/673 我封装的工具类: /** * 圆形进度 * @author chenk ...
- Egret的容器--删除对象,遮罩
class P91F extends egret.Sprite { public constructor() { super(); this.addEventListener(egret.Event. ...
- Egret Engine 2D - 遮罩
矩形遮罩 shp.mask = new egret.Rectangle(20,20,30,50); 注意如果rec发生变化,需要重要将rec赋值给shp.mask 删除遮罩的方法 sprite ...
- Egret Engine 2D - 矢量绘图
绘制矩形 drawRect 绘制矩形边 lineStyle( 10, 0x00ff00 清空绘图 clear 绘制园形 drawCircle 绘制直线 moveTo lineTo 绘制曲线 cur ...
- Egret初体验–躲避类小游戏
下面简单介绍一下我这个游戏:基本上就3个画面(准备再添加一个胜利的界面)开始画面,一个按钮,点击进入游戏游戏画面,滚动的背景,触摸移动的老鹰,从天而降的翔,以及右上角的时间条结束画面,显示结果,关注按 ...
- Egret官方案例学习笔记
1.资源记载方式 (1)Egret引擎是2.0.5. (2)resource/resource.json文件是: { "resources": [ { "name&quo ...
- Egret 纹理、计时器
1. 九宫切 典型例子就是圆角矩形的拉伸问题. 先去P一张绿色的圆角矩形. private createGameScene():void { var box:egret.Bitmap = new eg ...
- Egret学习笔记 (Egret打飞机-9.子弹对敌机和主角的碰撞)
运行起来,虽然主角飞机和敌机都在互相发射子弹,但是子弹打中了就和没打中效果是一样的.. 这一章我们就来处理子弹和飞机的碰撞问题. 我们所有的操作都是基于Main这个容器来做的.所以我就把这个处理放到M ...
随机推荐
- 在反射中Member{get{..}set{..}}与Member{get;set;}的区别?
最近的在写代码的时候,需要用到反射来获取类中的所有公开属性值,于是写下如下代码: StringBuilder sb = new StringBuilder(); foreach (var f in t ...
- win10在安装Oracle11g时出现了:[INS-13001]环境不满足最低要求,及未找到文件 E:\app\xxj\product\11.2.0\dbhome_1\owb\external\oc4j_applications\applications\WFMLRSVCApp.ear
win10安装Oracle11g碰到的3个问题: 1.win10在安装Oracle11g时出现了:[INS-13001]环境不满足最低要求 2.未找到文件 E:\app\xxj\product\11. ...
- 如何下载coursera视频
国内观看Coursera非常卡顿,经常播放到一半就卡死了,不知道什么原因.因此只能想办法下载下来之后再看. Github上有一个脚本点击打开链接,提供整门课程的下载服务.用着还是非常方便的,使用方法如 ...
- CSS 有趣的边框
今天看到一篇文章.是利用CSS边框来做折纸效果.感觉非常有意思.于是就对CSS的border研究了一下.发现还真有一些好玩的使用方法. 1.border折纸效果 首先是HTML代码,为了简单,就一个d ...
- CKEditor&ckfindtor
前言 之前的项目中一直使用的是FCKeditor,昨天突然有个想法:为什么不试一下新的CKEditor呢?于是花了大半天的时间去学习它的使用方法,如今把我的学习过程与大家分享一下. 谈起FCKedit ...
- iPad横竖屏代码适配
你可能非常了解用不同的方式去适配不同尺寸的iPhone屏幕,在适配iPhone屏幕时你需要考虑的只是屏幕大小变化带来的UI元素间隔的变化,但是在iPad上主要针对的是横竖屏下完全不同的UI元素的布局, ...
- python-查询员工信息表
python查询员工信息表 基本要求: 用户可以模糊查询员工信息 显示匹配了多少条,匹配字符需要高亮显示 代码: #!/usr/env python #coding:utf-8 import time ...
- Struts1 中实现Action跳转地址栏变化的方法
Action进行跳转,有时候地址栏不变化,如果重复刷新就会重复提交, 这里一般需要进行重定向: 1.在xml里面进行配置 <action path="/checkCdconfirmEn ...
- 编写利用Fragment创建新闻列表
编写利用Fragment创建新闻列表 1.创建新闻实体类News,代码如下: public class News { private String title; private String co ...
- SQL 生成可配置流水号
需求背景每执行一次方法,根据公式返回最新的流水号.第一次使用时需要先插入一条数据,BizSeqValue 为流水起始号:A2014030000,Formula 为公式:A[yyyy][mm][c4], ...