2012-04-16 119 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