2011-10-09 69 views
0

我有一个我正在做的游戏的时间限制器,我现在正在使用的是初始值并扣除每帧更新的一个值。这里是代码:为游戏创建计时器的最佳方式

- (void) gameTime { 
    fullTime = fullTime - 1; 
    NSLog(@"%i", fullTime); 
    float xScale = 10 * fullTime/4000; 
    //_game.timerGraphic.scaleX = 10; 
    //[_game.timerGraphic setScaleX:10]; 
    [_game.timerGraphic setScaleX:xScale];  
} 

现在的问题是,timerGraphicCCSprite,当我更新ScaleX它不工作,除非它是一个绝对值,是有反正我可以让这个更顺畅,调整“计时器“以更平滑的方式?

回答

2

这种方法的问题在于,您的应用中的计时器取决于帧速率。 Cocos2D有一些内置的机制来处理这类问题。特别是,您的想法是,每次加载新帧时,都会根据前一帧和当前帧之间的时间量已过时更新动画值。看看this Cocos2D tutorial中的“让事情变动”部分。它解释了如何安排一个选择器(即创建一个定时器来触发-nextFrame:方法)。此方法通过了可用于创建平滑动画的dt(增量时间)参数。

+0

嘿,谢谢你的回复,但是现在我发现了这个问题,你会发现当你想用float扩展一个东西时显然你应该在''1.5f'的末尾使用'f',但是在我的例子多数民众赞成没有发生,它做'1.5'而不是!你能告诉我我该怎么做吗? – ahoura

+1

我不认为这是你的问题。把'f'放在小数值文字的末尾意味着你希望这个数字明确地是一个'float'而不是'double'(在十进制文字中是objective-c的默认值)。什么是真正的是,你有'全时/ 4000'是执行整数除法而不是浮点除法。你可以通过编写'(float)10.0 * fullTime/4000.0'来解决这个问题。不过,您的动画代码依赖于帧速率,这种帧速率永远不会尽可能平滑。 – Sean

+0

非常感谢,你的代码实际上工作,我知道动画不会是,对于我已经使用过'runAction'的其他东西,但我不能得到我的头我怎么会用runAction这样做,而当前的代码有一个半平滑的动画到它。最后一个问题,ScaleX,无论如何都要从精灵的一侧而不是双方调整大小/ setScaleX? (当前代码从两侧扩展图像) – ahoura