Game-Timer-iOS 1.0.0

Game-Timer-iOS 1.0.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2015年4月

由 PJ Engineering and Business Solutions Pty. Ltd. 维护。



  • PJ Engineering and Business Solutions Pty. Ltd.

目的

GameTimer 是一个轻量级的计时器,您可以用它来制作 iOS 游戏。它非常容易扩展以适应更复杂的项目。一个用途是在主计时器运行时更新进度条。

GameTimer 集成了两个协同工作的计时器,分别称为 longTimershortTimer。其中 shortTimer 作为分辨率更高的计时器,可用于更新进度条或持续轮询网络连接(例如)。其间隔通常是 longTimer 间隔的一个小分数。

当应用进入后台时,GameTimer 会自动暂停,当应用再次处于活跃状态时会“取消暂停”。

支持的操作系统 & SDK 版本

  • 支持的构建目标 - iOS 7.0
  • 最早支持的部署目标 - iOS 6.0

ARC 兼容性

GameTimer 需要 ARC。

如果您想将整个项目转换为 ARC,请运行 Xcode 中的 Edit > Refactor > Convert to Objective-C ARC... 工具,并确保您想要使用 ARC 的所有文件都被选中。

线程安全

stopTimer 方法必须在调用 startTimer 方法的同一线程中调用。

安装

要将 GameTimer 安装到您的应用中,请将 GameTimer.hGameTimer.m 文件拖到您的项目中。

添加

#import "GameTimer.h"

到任何将使用 GameTimer 的类的顶部(*.h 或 *.m)。

确保该类遵循 GameTimerDelegate 协议

修改 .h 文件

@interface ViewController : UIViewController <GameTimerDelegate>

实现协议方法,如

-(void)longTimerExpired: (GameTimer *)gameTimer
{
    //Time is up
}

声明实例变量/属性

@property (strong, nonatomic) GameTimer *gameTimer;

viewDidLoad 等方法中初始化计时器

self.gameTimer = [[GameTimer alloc] initWithLongInterval:2*60 andShortInterval:5 andDelegate:self]; //2 minute timer with short intervals of 5 seconds

当您需要开始时启动计时器

[self.gameTimer startTimer];

如果需要,可以提前停止计时器

[self.gameTimer stopTimer];

属性

分辨率更高的计时器持续时间。这必须小于 longInterval。否则,GameTimer 的行为不可预测。单位是秒。它可以是 0.1 毫秒那么小。

@property float shortInterval;

总体计时器持续时间。当此计时器到期时,GameTimer 将自动停用。它会自动清理停用 shortTimerlongTimer 后的内存。单位为秒。它可以短至 0.1 毫秒。

@property float longInterval;

自 GameTimer 启动以来的秒数,不包括应用进入后台状态时的时间。

@property (nonatomic, readonly) float time;

代理必须响应该 longTimerExpired: 方法。这是 强制性的。当 longTimer 到期时调用。

@property(nonatomic, weak) IBOutlet id <GameTimerDelegate> delegate;

方法

此方法用于初始化 GameTimer。GameTimer 绝对不允许 使用 init 初始化:初始化 GameTimer 不会自动开始计时器。

示例

self.gameTimer = [[GameTimer alloc] initWithLongInterval:2*60 andShortInterval:0.5 andDelegate:self];

上面的示例将创建一个 longInterval 为 120 秒的 GameTimer。它将以每 0.5 秒触发一次的方式调用 shortTimerExpired: 方法。

始终将 GameTimer 分配给单例变量 一次(如在 viewDidLoad 方法中)。如果您需要更改设置,请先停止计时器,然后使用属性进行更改,例如:

[self.gameTimer stop];
self.gameTimer.longInterval = 3*60; //change settings
[self.gameTimer start]; //then start the timer

如果您需要释放 GameTimer,则首先停止 GameTimer。例如:

[self.gameTimer stop];
self.gameTimer = nil;

类初始化器。

- (id)initWithLongInterval:(float)longInterval andShortInterval: (float)shortInterval 
andDelegate:(id <GameTimerDelegate>) delegate;

停止计时器。这 必须 从调用 startTimer 方法的同一线程中调用。

- (void) stopTimer;

重启计时器。

- (void) startTimer;

暂停计时器

-(void)pauseTime;

取消暂停计时器

-(void)unPauseTime;

代理方法

此方法在 longTimer 到期时触发。GameTimer 在此点停止。您需要调用 startTimer 方法来重启计时器。代理实现此方法是 强制性的

-(void)longTimerExpired: (GameTimer *)gameTimer;

shortTimer 到期时,此方法会触发。它将继续触发,直到 longTimer 到期,此时 GameTimer 将停止。代理实现此方法是 可选的。为了更新进度条,应实现并使用该方法,并配合 time 值和 longInterval 值。此方法不一定在精确时刻触发。仅用于更新、轮询等任务。

-(void)shortTimerExpired: (GameTimer *)gameTimer time: (float)time longInterval: (float)longInterval;

示例项目

示例项目将演示如何使用类的基本功能。它将更新进度条。显然,它可以扩展到您的游戏引擎,比如。想象是关键。

已知问题

警告:如果将新创建的游戏计时器引用更改为新 [GameTimer alloc] 新地址,则在重新分配合同时必须先调用 stopTimer 方法。这是因为 NSRunLoop 保留着强引用。

示例(正确的方法——尽管我建议永远不要重新分配合同时使用)

  self.gameTimer = [[GameTimer alloc] initWithLongInterval:2*60 andShortInterval:0.5 andDelegate:self]; //First allocation
  [self.gameTimer stop];
  self.gameTimer = [[GameTimer alloc] initWithLongInterval:5 andShortInterval:2 andDelegate:self]; //Second NEW allocation

任何问题

随时提出改进建议,分叉、报告错误或提出任何问题。

PJ 工程和商业解决方案有限公司 http://www.pjebs.com.au