2014-03-26 24 views
1

所以我有這樣的方法:與精靈套件從更新功能動畫調用方法

-(void)levelLabel { 
    SKLabelNode *levelOne = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; 
    levelOne.fontSize = 25; 
    levelOne.fontColor = [SKColor whiteColor]; 
    levelOne.text = @"Level 1"; 
    levelOne.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2); 
    [self addChild:levelOne]; 

    SKAction *stageNumberIn = [SKAction fadeInWithDuration:1.0]; 
    SKAction *stageNumberOut = [SKAction fadeOutWithDuration:1.5]; 
    SKAction *remove = [SKAction removeFromParent]; 
    SKAction *sequence = [SKAction sequence:@[stageNumberIn, stageNumberOut, remove]]; 

    [levelOne runAction:sequence]; 

} 

,我嘗試將它稱之爲的「更新」功能是這樣的:

-(void)update:(CFTimeInterval)currentTime { 

    [self levelLabel]; 
} 

但將無法工作。該標籤的作品沒有衰減動畫。如果我把SKLabelNode在initWithSize:

-(id)initWithSize:(CGSize)size { 
    ... 
} 

它可以完美運行。

有人能告訴我我哪裏出錯了嗎?

回答

4

您的levelLabel方法被稱爲每幀更新,這將導致該動作被執行幀。

您只需要運行一次。因此,無論從更新刪除或運行操作之前增加如下檢查:

if (![levelOne hasActions]) { 
    [levelOne runAction:sequence]; 
} 

的首選方法將是從更新方法將其刪除,並執行它只是必要的,因爲要創建在每個標籤時框架(並且每次將它添加到場景中,這將會膨脹你的節點),當你只能創建一次並且只在需要的時候才更新它

+0

好吧,我誤解了我猜的update方法的用法。所以我把我的「SKLabelNode」函數放在「initwithSize」的上面,並在那裏調用它: - (id)initWithSize:(CGSize)size { [self levelLabel]; } 謝謝,這對我有用! – zorn0r

+0

不要忘記,更新方法是SK渲染循環的一部分,每秒調用60次(60fps) – giorashc

+0

是的我相信創建靜態「Level 1」標籤的地方最好在節點中創建/場景的init方法並僅在需要時執行淡入淡出操作 – giorashc