2014-03-02 77 views
0

在cocos2d以前我曾經使用CCCallFuncN和CCCallFuncNDcocos2d v3帶對象的CCActionCallFunc?

我試圖調用一個函數並通過函數發送對象。我嘗試了一些似乎沒有工作的實現。我與CCActionCallBlock最新嘗試是這樣的:

[gun runAction:[CCActionRepeatForever actionWithAction:[CCActionCallBlock actionWithBlock:^ 
{ 
    CGPoint gunPoint = CGPointMake(gun.position.x - gun.contentSize.width/2, gun.position.y); 

    CGPoint shootVector = ccpSub(gunPoint, _playerPos); 
    float gunAngle = -1 * ccpToAngle(shootVector); 
    gun.rotation = CC_RADIANS_TO_DEGREES(gunAngle); 
}]]]; 

而且我收到以下錯誤:

-[CCActionCallBlock elapsed]: unrecognized selector sent to instance 0x15f84c50 2014-03-02 16:54:19.768 JuhnerickShooterFinal[22576:70b] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CCActionCallBlock elapsed]: unrecognized selector sent to instance 0x15f84c50'

有人可以闡明如何將對象傳遞到從行動調用的函數的一些情況。

謝謝:)

+0

如果您需要每幀運行代碼,請移除重複永久操作,而是在目標節點中安排更新選擇器。您可以使用阻止操作來發出調度。 – LearnCocos2D

回答

2

你可以從CCActionCallBlock reference看到,這是一個瞬間動作不包含elapsed方法,它是CCActionInterval類(及所有子類)內。

如果你想要的東西發生的每一幀,然後只需將代碼添加到該節點的update方法:

Gun.m:

- (void)update:(ccTime)delay { 
    GPoint gunPoint = CGPointMake(self.position.x - self.contentSize.width/2, self.position.y); 
    CGPoint shootVector = ccpSub(gunPoint, _playerPos); 
    float gunAngle = -1 * ccpToAngle(shootVector); 
    self.rotation = CC_RADIANS_TO_DEGREES(gunAngle); 
} 

注意:您將需要弄清楚如何訪問_playerPos在上面的代碼中。 Player可以通過遊戲場景中的單態模式訪問。

+0

感謝,看起來像我需要重組我的程序,使其成爲可能 - 我目前正在更新我的舊項目從cocos2d 0.99到cocos2d v3 :) – Lagoo87