簡體   English   中英

Cocos2d:將圖層縮放為精靈

[英]Cocos2d : scale layer to a sprite

解決這個瑣碎的功能時,我遇到了一些問題。 在游戲中,在關卡中的某個點,我停止了游戲的主要循環,並希望縮放到玩家精靈。 將播放器精靈添加到包含此循環的圖層中,並運行代碼以縮放到該播放器。

看起來像這樣:

-(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)-在創建場景時只需添加

據我所知,縮放是受錨點影響的。 如果您所需要做的只是放大而不使用CCCamera?

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

您可以更改eyeZ來放大和縮小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM