OpenGLでぶんぶんループを回っているようなアプリは、かなりの勢いで電池を消費するようです。
プレイヤーが考えている時間が長いパズルゲームを作ってしまったので、プレイしている間に消費電力を抑える工夫が必要でした。
そこで一定の間操作が無かったらOpenGLのループを回さない、というごく単純な戦略をとりました。
// アニメーション開始
- (void)startAnimation {
// 動作中のタイマーがあったら停止
if (animationTimer != nil && [animationTimer isValid]) {
[animationTimer invalidate];
animationTimer = nil;
}
// タイマー開始時間をメモ
startTime = [NSDate timeIntervalSinceReferenceData];
// 描画タイマー開始(30fpsをメドで再描画)
animationTimer =
[NSTimer scheduledTimerWithTimeInterval:1.0/30
target:self selector:@selector(draw) userInfo:nil repeats:TRUE];
}
// アニメーション停止
- (void)stopAnimation {
if (animationTimer != nil && [animationTimer isValid]) {
[animationTimer invalidate];
}
animationTimer = nil;
}
// ドラッグイベントハンドラ
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
// 操作時間更新
startTime = [NSDate timeIntervalSinceReferenceDate];
// ドラッグの処理
}
// 描画メソド
- (void)draw{
// オブジェクトの描画
NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
NSTimeInterval interval = now - startTime;
// 何もしていない時間が5秒あったらループ停止
if (interval > 5) {
[self stopAnimation];
}
}
こんな感じでアニメーションを停止するようにしました。
これで触っていないときに電池の減りを抑えることができました。
| |trackbacks(2) |15:08 2010/11/05 |
【ブログ更新】 OpenGLで省電力 – OpenGLでぶんぶんループを回っているようなアプリは、かなりの勢いで電池を消費するようです。プレイヤーが考えている時間が長いパズルゲームを作ってしまったので、プレイしている間に消費電力… http://wp.me/p18NTR-7L