Cocos2d:将图层缩放为精灵

时间:2012-04-16 14:36:37

标签: iphone cocos2d-iphone

我在解决这个看似简单的功能方面遇到了一些问题。在我的游戏中,在一个关卡中的某个时刻,我停止主游戏循环并想要缩放到玩家精灵。播放器精灵被添加到包含此循环的图层中,并运行代码以缩放到此播放器。

看起来像这样:

-(void) stopGameAndZoomToPlayer {
    [gamePlayLoop_ invalidate];

    zoomToPlayerLoop_ = [NSTimer scheduledTimerWithTimeInterval:1.0f/60.0f target:self selector:@selector(tickZoomToPlayerLoop:) userInfo:nil repeats:YES];
}

tick方法现在实现如下:

-(void) tickZoomToPlayerLoop:(NSTimer*)timer {
    if (self.scale > 4) {
        [zoomToPlayerLoop_ invalidate];
    }
    [self setScale:self.scale+0.001];   

    CGSize winSize =  [[CCDirector sharedDirector]winSize]; 
    CGPoint targetPosition = playerSprite_.position;

    float wantedX = ((winSize.width/2-targetPosition.x)/self.scale);
    float wantedY = ((winSize.height/2-targetPosition.y)/self.scale);
    CGPoint maximumCenter = ccp(wantedX,wantedY);

    [self setPosition:maximumCenter];     
}

看起来琐碎对吧?然而,我必须缺少一些东西,因为变焦虽然很慢,但却与玩家精灵相对。 在tickZoomToPlayerLoop计时器结尾处的玩家精灵出现在屏幕的右上角;它不在中心(但甚至不在视口右上角的中心)。

我看到它的方式,这段代码将主图层的中心放到了玩家精灵的位置。然后它缩放。实际上位置不应该在缩放循环中,但是我把它放在这里是因为我需要处理关卡层的边界,因为现在用户可以在关卡之外看到不可播放区域的黑色空白。然而,即使循环开始时主层的中心似乎是玩家精灵,当缩放时,人们可以看到它不是。

比例是否针对CCNode的中心?它是否以任何方式出现?锚点是否与缩放的方式起作用?

更多信息:

  • 主图层的锚点是(0.5,0.5) - 默认值
  • 主图层的位置,首先在计时器之前,(0,0) - 在创建场景时简单添加

1 个答案:

答案 0 :(得分:0)

根据我的知识缩放会受到锚点的影响。 如果你需要做的只是放大方式而不使用CC Camera?

[myLayer.camera setEyeX:0 eyeY:0 eyeZ:zoomValue];

您可以更改eyeZ以放大和缩小。