2012-04-16 85 views
0

我在解决这个看起来很平凡的功能时遇到了一些问题。在我的游戏中,在某个关卡的某个位置,我停止了主游戏循环,并想缩放到玩家精灵。玩家精灵被添加到包含此循环的图层,并运行代码以缩放到该玩家。Cocos2d:将图层缩放到精灵

它看起来像这样:

-(void) stopGameAndZoomToPlayer { 
    [gamePlayLoop_ invalidate]; 

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

蜱方法,是目前实现这样的:

-(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) - 创建场景时简单添加

回答

0

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

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

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

+0

他们不推荐使用CCCamera和2D场景。 – 2012-04-19 20:04:10

+0

是正确的,但从我的经验来看,它工作得很好 – 2012-05-21 10:28:26