1

我有一个带有 Box2D 物理的 Cocos2D 游戏。在我的 GameScene.mm 中,我正在研究一种缩放到给定比例的方法:

-(void) zoomToScale:(float)zoom withDuration:(ccTime)duration
{
    id action = [CCScaleTo actionWithDuration:duration scale:zoom];
    [scrollNode runAction:action];

    currentZoomLevel = zoom;
}

我遇到的问题是 currentZoomLevel (在场景的 update() 方法中使用)被立即设置为缩放,并且没有根据动画逐渐调整。因此,在动画进行时,currentZoomLevel 变量是完全错误的。

我试图找出一种方法让 currentZoomLevel 变量与动画的进度相匹配,因为它正在发生。根据 CCAction API 参考,CCAction 的更新方法根据动画的进度取 0 到 1 之间的 ccTime(0 刚刚开始,1 刚刚结束)。

如何从操作外部访问此 ccTime?我想在我的场景的更新方法中有这样的东西:

if(animating)
{
    float progress = [action getProgress]; // How do I do this?

    // Do math to update currentZoomLevel based on progress
}

我在这里遗漏了一些明显的东西,还是我必须继承 CCScaleTo?

4

2 回答 2

1

您应该能够在动画制作时直接访问比例尺。

代替 float progress = [action getProgress];

尝试 float current_scale = some_node.scale ;

其中“some_node”是您正在制作动画/缩放的东西。

于 2011-08-22T02:21:00.553 回答
0

实际上,您最好的选择是使用新的 Cocos2D 扩展“CCLayerPanZoom”,它可以为您处理所有这些奇妙的事情!它应该是任何新的 cocos2D 安装 (v.1.0+) 的一部分。

于 2011-12-13T13:50:25.897 回答