【咸鱼教程】基于系统时间的计时器DateTimer(不受FPS影响)
教程目录
一 计时器简介
二 计时器实现
三 Demo下载
一 计时器简介
在手机上跑游戏时,可能由于运动物体过多,导致帧频太低,计时不准确。
比如一些倒计时的游戏,可能倒计时30s,变成了35s。
比如iphone运行流畅游戏倒计时60s,实际耗时60s,而android有点儿慢,倒计时60s,实际耗时70s。
比如一些物体运动,每帧移动1像素,60fps,移动60像素,由于卡顿,帧频降低到40fps,那么实际这个物体只移动了40像素。
比如在unity中,有两种帧环FixedUpdate跟Update,Update每帧执行一次,而FixedUpdate固定间隔执行一次.
比如...
所以我写了一个计时器,基于系统时间计时,不受fps影响。
该工具类参考了某位水友的帖子,忘了是哪个贴了,在此感谢一下...
如图,在帧频较低时,egret.Event.ENTER_FRAME和egret.timer计数较低,而DateTimer计数不受fps影响。
二 计时器实现
使用方法和egret.Timer一致
1
2
3
|
var dateTimer:DateTimer = new DateTimer( 1000 );
dateTimer.addEventListener(egret.TimerEvent.TIMER, this .onDateTimerHandler, this );
dateTimer.start();
|
DateTimer源码如下
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
/**
* 根据系统时间的计时器
* @author chenkai
* 2016/12/30
* Example:
* var dateTimer:DateTimer = new DateTimer(1000);
* dateTimer.addEventListeners(egret.TimerEvent.TIMER, this.onTimerHandler, this);
* dateTimer.addEventListeners(egret.TimerEvent.TIMER_COMPLETE, this.onTimerComplete, this);
* dateTimer.reset();
* dateTimer.start();
*/
class DateTimer extends egret.EventDispatcher{
/**以前时间 */
private previous: number;
/**当前时间 */
private curTime: number;
/**已过去时间 */
private passTime: number;
/**累计时间 */
private accTime: number;
/**每帧耗时 */
public delay: number;
/**当前计数 */
public currentCount:number;
/**设置的计时器运行总次数 */
public repeatCount:number;
public constructor(delay:number,repeatCount:number = 0 ) {
super ();
this .delay = delay;
this .repeatCount = repeatCount;
}
/**开始计时 */
public start(){
this .previous = egret.getTimer();
this .accTime = 0 ;
egret.startTick( this .update, this );
}
/**重置计时 */
public reset(){
this .previous = egret.getTimer();
this .accTime = 0 ;
this .currentCount = 0 ;
}
/**停止计时 */
public stop(){
egret.stopTick( this .update, this );
}
/**更新时间 */
private update():boolean{
this .curTime = egret.getTimer();
this .passTime = this .curTime - this .previous;
this .previous = this .curTime;
this .accTime += this .passTime;
while ( this .accTime >= this .delay) {
this .accTime -= this .delay;
this .currentCount++;
if ( this .repeatCount > 0 && ( this .currentCount == this .repeatCount)){
this .dispatchEvent( new egret.TimerEvent(egret.TimerEvent.TIMER_COMPLETE));
this .stop();
}
this .dispatchEvent( new egret.TimerEvent(egret.TimerEvent.TIMER));
}
return false ;
}
}
|
三 Demo下载
转载于:https://www.cnblogs.com/gamedaybyday/p/9219941.html
【咸鱼教程】基于系统时间的计时器DateTimer(不受FPS影响)相关推荐
- 嵌入式Linux系统时间设置
Linux系统的很多功能都需要读取时间为基础.比如:日志系统需要时间戳以记录log,为后期的问题排查提供支撑:cron服务需要正确的时间设置以支撑周期性.特定时间点执行某个任务:等等.大多数Linux ...
- Zabbix监控服务器系统时间
很多系统管理员会遇到一个问题,服务器系统时间出现偏差,直到业务受到影响才发现.最近我也遇到了这个问题,公司内有很多服务器,而且什么版本的系统都有,没有统一的时间同步源.最近也因为这个问题对桌面虚拟化产 ...
- centos7 校正linux系统时间_基于centos7系统部署NTP服务及配置时间定时同步
概述 linux服务器在提供服务时,要和其他机器进行请求的交互,实际生产环境中,可能因为时间不同步,导致了服务异常. 下面介绍下怎么部署NTP服务来解决这个问题. ps:强烈吐槽下头条这个新排版功能, ...
- 某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为 1μs。
某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为 1μs.在 T 时刻就绪队列中有 3 个进程 P1.P2 和 P3,其在就绪队列中的等待时间.需要的 CPU 时 ...
- 计算机毕业设计ssm基于客户时间窗变化的物流配送管理系统设计ro75j系统+程序+源码+lw+远程部署
计算机毕业设计ssm基于客户时间窗变化的物流配送管理系统设计ro75j系统+程序+源码+lw+远程部署 计算机毕业设计ssm基于客户时间窗变化的物流配送管理系统设计ro75j系统+程序+源码+lw+远 ...
- GDI绘制时钟效果,与系统时间保持同步,基于Winform
2019独角兽企业重金招聘Python工程师标准>>> 这是直接在Winform的基础上进行绘制的.接下来,我对时钟进行了封装,封装成一个名为CSharpQuartz的类,效果如下: ...
- 欧陆战争5设备系统时间与服务器时间不一致,欧陆战争5怎么调回时间?欧陆战争5帝国调回时间的教程...
在欧洲战争5的游戏中,调整时间可谓是一个非常好用的bug.但是很多玩家却不知道如何合理的利用调整时间来给自己增加实力,今天我们就来给大家介绍一下,欧陆战争5怎么调回时间? 首先调时间,其实就是让真正的 ...
- STM32 基础系列教程 5 – 系统定时器
前言 学习stm32 systime的使用,用基本定时器产生定时1ms定时中断,用于参生1ms系统时钟节拍,并实现将1ms 节拍改成500us 或其它时间功能.并实产生的时间节拍为机基准实现控制LED ...
- Visual Studio图形调试器详细使用教程(基于DirectX11)
前言 对于DirectX程序开发者来说,学会使用Visual Studio Graphics Debugger(图形调试器)可以帮助你全面了解渲染管线绑定的资源和运行状态,从而确认问题所在.现在就以我 ...
最新文章
- 如何快速研究透一篇 Paper 并提出有价值的问题?
- 一个word文档中,多个表格的批量调整(根据窗口调整表格和添加表格水平线)...
- jointable 能加多个字段吗_Excel函数Countif、Countifs超级实用技巧,你真的都掌握吗?...
- cf 1511 D. Min Cost String
- react学习(37)----获取子组件得实例
- 马哥学习李洋个人笔记之-----正则表达式
- 力扣1512.好数对的数目
- [查找问题] 例5.1 找x
- 2018.8.2 python中is和==的区别
- C-Free5.0破解码
- SQL Server 2005数据库可疑、置疑修复方法
- WebRTC 什么是source,track, sink?什么是AudioSink,VideoSink,MediaSink?
- Spring @ResponseBody未生效,无法返回json数据 前端页面显示404
- eve手游php,[Murky Army]EVE无烬星河PVP入门————小队战战术及队伍配置(
- 用程序实现基本计算器功能
- iOS永久签名不掉签工具,轻松签超详使用教程
- Android的Bitmap图片压缩与内存的关系
- Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-1.5.0-gcj-4.5/lib/tools.jar 求解
- JS 实现十大排序算法
- PVCBOT【21号】挑战者--人形机甲战士
热门文章
- 正则表达式(开源框架)
- 关于target=标签
- iOS- UITableView could not hold the selected row after reload
- (转载)[MySQL技巧]INSERT INTO… ON DUPLICATE KEY UPDATE
- css背景渐变的技巧与方法
- OpenCV 1.x 2.x 编程简介(矩阵/图像/视频的基本读写操作)
- 中文分词器分词效果的评测方法
- CentOS7下搭建Nginx+PHP7的安装配置
- 只用一招,让你Maven依赖下载速度快如闪电
- Vcenter一次性将服务器四个网卡从端口组迁移到分布式交换机的方法