Egret 纹理、计时器

1. 九宫切

  典型例子就是圆角矩形的拉伸问题。

  先去P一张绿色的圆角矩形。

    private createGameScene():void {
        var box:egret.Bitmap = new egret.Bitmap();
        box.texture = RES.getRes("box_png");
        //拉伸
        box.width *= 2;     //矢量绘图是 Shape/Sprite 的 graphics 有的功能,才有自身的 width/height 与 所绘图形的 width/height
        this.addChild(box);

        var box9:egret.Bitmap = new egret.Bitmap(RES.getRes("box_png"));
        var rect9:egret.Rectangle = new egret.Rectangle(40, 40, 80, 80);
        box9.scale9Grid = rect9;
        box9.width *= 2;
        box9.y = 200;
        this.addChild(box9);
    }

  看下两者的区别:

2. 纹理集

  • 不用每次为一张图片执行一次HTTP请求;
  • 引擎渲染时减少IO的次数;

  主要是在配置与资源调用上进行微调即可:

  • 合图并生成 json 配置文件;
  • 资源类型为 sheet: {"name":"dogs","type":"sheet","url":"assets/dogs.json"}
  • 调用时:RES.getRes( "dogs.dog1" )

 3. Timer

class myTimer extends egret.DisplayObjectContainer
{
    public constructor()
    {
        super();
        var timer:egret.Timer = new egret.Timer(500, 5);    //500ms执行1次,一共执行5次
        timer.addEventListener(egret.TimerEvent.TIMER, ()=>{
            myTimer.count ++;
            console.log("count:" + myTimer.count);
        }, this);
        timer.addEventListener(egret.TimerEvent.TIMER_COMPLETE, ()=>{ console.log("end")}, this);
        timer.start();
    }

    public static count:number = 0;
}

4. Tick: 

    private createGameScene():void {
        var heroTicks = new startTickerTest();

        //要添加到舞台才会触发 egret.Event.ADDED_TO_STAGE 事件,但 Main 这个容器是由 egret 自己添加到舞台的,看不到 addChild
        this.addChild(heroTicks);
    }
class startTickerTest extends egret.DisplayObjectContainer {
    public constructor() {
        super();

        //容器被添加到舞台显示列表时调用
        this.once(egret.Event.ADDED_TO_STAGE, this.onLoad, this);
    }

    private hero:egret.Bitmap;
    private speed:number = 0.05;
    private time:number = 0;

    private onLoad(event:egret.Event) {
        var hero:egret.Bitmap = new egret.Bitmap(RES.getRes("hero1_png"));
        this.addChild(hero);
        this.hero = hero;
        this.time = egret.getTimer();
        //不与帧率挂钩的每秒60次回调
        egret.startTick(this.moveStar, this);
    }

    //egret 在执行 startTick 的回调时,会给予参数 timeStamp(当前时间戳)
    private moveStar(timeStamp:number):boolean {
        var now = timeStamp;
        var time = this.time;
        var pass = now - time;   //平均时间间隔=1000ms/60=16.67ms
        console.log("moveStar: ",(1000 / pass).toFixed(5));
        this.hero.x += this.speed * pass;
        if(this.hero.x >= 300)
            egret.stopTick(this.moveStar, this);
        this.time = now;
        return false;
    }
}

5. 帧事件:

    private createGameScene():void {
        var heroTicks = new startTickerTest();
        this.addChild(heroTicks);
    }
class startTickerTest extends egret.DisplayObjectContainer {
    public constructor() {
        super();
        this.once(egret.Event.ADDED_TO_STAGE,this.onLoad,this);
    }

    private hero:egret.Bitmap;
    private timeOnEnterFrame:number = 0;
    private speed:number = 0.5;

    private onLoad(event:egret.Event) {
        var hero:egret.Bitmap = new egret.Bitmap(RES.getRes("hero1_png"));
        this.addChild(hero);
        this.hero = hero;
        //监听帧事件
        this.addEventListener(egret.Event.ENTER_FRAME,this.onEnterFrame,this); 
        this.timeOnEnterFrame = egret.getTimer();
    }

    private  onEnterFrame(e:egret.Event){
        var now = egret.getTimer();
        var time = this.timeOnEnterFrame;
        var pass = now - time;
        console.log("onEnterFrame: ", (1000 / pass).toFixed(5));
        this.hero.x += this.speed * pass;
        if(this.hero.x > 300)
            this.removeEventListener(egret.Event.ENTER_FRAME,this.onEnterFrame,this);
        this.timeOnEnterFrame = egret.getTimer();
    }
}

  接下来应该学习下怎么播放帧动画与骨骼动画了。

时间: 2024-11-08 22:10:51

Egret 纹理、计时器的相关文章

Egret自定义计时器(决战沙城TimerManager和Laya.timer)

一 自定义计时器 因为游戏中经常用到计时器,比如每1秒发射一枚子弹啊,每2秒怪物AI自动转向啊 每次去new Timer 然后addEventListener(egret.TimerEvent...     之类的太麻烦了. 所以自定义一个计时器 二  决战沙城的自定义计时器 来看看决战沙城的自定义计时器 原理就是egret.Ticker每帧执行,让列表里TimerHandler加上时间或帧,检查当到了计时时间结束时,就执行回调. /** * Created by yangsong on 201

Egret 位图纹理 学习

1,重新设置舞台大小,可以直接到VS中的 "解决方案"中,找到 launcher->egret_loader.js中,找到setDesignSize方法,修改其中大小即可:有时直接在游戏运行时修改,然后保存刷新就行: 2,texture 是Texture 纹理类的纹理对象,通过getRes("纹理名字")方法来获取要加载的纹理资源,然后赋值给位图对象: private createBitmapByName(name : String) : egret.Bitm

Egret初体验–躲避类小游戏

下面简单介绍一下我这个游戏:基本上就3个画面(准备再添加一个胜利的界面)开始画面,一个按钮,点击进入游戏游戏画面,滚动的背景,触摸移动的老鹰,从天而降的翔,以及右上角的时间条结束画面,显示结果,关注按钮和重玩一次按钮  游戏主文件:GameContainer.ts(游戏逻辑)4个类文件:GameUtil.ts(功能集合),BgMap.ts(背景滚动),Shit.ts(翔的创建和回收),ScorePanel.ts(结果展示) /**GameUtil.ts*/ /**基于圆心的碰撞检测*/ publ

简单介绍了解白鹭引擎Egret

(一)关于白鹭引擎Egret Egret引擎是一个开源免费的游戏框架,用于构建二维游戏.演示程序和其他图形界面交互应用等.Egret使用TypeScript脚本语言开发.当游戏完成最终的打包后,可以将程序转换为HTML5游戏.实现跨平台特性. Egret不仅仅是一个基于HTML5技术的游戏引擎,我们的产品线中除了Egret引擎还提供了很多辅助游戏开发的工具.准确的来说,Egret是一套游戏开发的解决方案.你可以使用Egret引擎来帮助你开发HTML5游戏,并运行在手机和PC端的浏览器中,同时也你

白鹭Egret学习之egret.ImageLoader.load的一个小问题(#1011:流错误)

egret.ImageLoader.load的路径问题 本来这个问题只是一个小问题,但是是学习Egret路途上遇到的第一个困惑了一段时间的问题,也花了一段时间去进行各种尝试.调试想要解决问题.同时也是由于自身基础不够扎实导致,所以记录下来警醒自己. 使用egret.ImageLoader.load加载ImageLoader的资源,其默认路径为工程所在路径,假设工程TEST下有以下资源:TEST->resource->assets->123.jpeg,如下图: 现在想要创建一个位图对象,使

Egret置于后台时,暂停游戏逻辑 (Egret 5 )

官网教程-生命周期:http://developer.egret.com/cn/2d/lifecycle 主要是在游戏置于后台时,关闭游戏逻辑.渲染逻辑和背景音乐,保证更好的用户体验. 一 Egret 5.1版本新API 5版本引入了egret.Ticker.egret.lifecycle  API来暂停: 二 源码位置 egret.ticker就是SystemTicker,同时lifecycle也在SystemTicker.ts 文件里. 三 暂停流程 首先在WebLifeCycleHandl

[Egret]长按图片分享、分享图片、本地存储

egret 分享有API可以把一个显示对象树渲染成一个位图纹理,我把它赋值给 HTML 的 Image 元素,就实现了图片的显示,在微信中,通过长按图片可以分享出去.当然在其他浏览器可以保存在本地. 第一步 添加HTML元素 <div id="divImage" style="background: #373737;display:none;text-align:center;z-index:99;width:100%;height:100%;position: abs

Egret 学习笔记 h5牛牛源码 h5牛牛源码搭建教程

1.纹理集实际上就是将一些零碎的小图放到一张大图当中.游戏中也经常使用到纹理集.使用纹理集的好处很多,我们通过将大量的图片拼合为一张图片从而减少网络请求,原先加载数次的图片资源现在加载一次即可.同时,在引擎渲染的时候也会减少IO读取,从而提高h5牛牛源码性能.h5牛牛源码Q 2171793408     http://wowotouba.com/h52.只要发生事件,Flash就会调度事件对象.如果事件目标不在显示列表中,则Flash Player或AIR将事件对象直接调度到事件目标.例如,Fl

【咸鱼教程】基于系统时间的计时器DateTimer(不受FPS影响)

教程目录一 计时器简介二 计时器实现三 Demo下载 一 计时器简介在手机上跑游戏时,可能由于运动物体过多,导致帧频太低,计时不准确.比如一些倒计时的游戏,可能倒计时30s,变成了35s.比如iphone运行流畅游戏倒计时60s,实际耗时60s,而android有点儿慢,倒计时60s,实际耗时70s.比如一些物体运动,每帧移动1像素,60fps,移动60像素,由于卡顿,帧频降低到40fps,那么实际这个物体只移动了40像素.比如在unity中,有两种帧环FixedUpdate跟Update,Up