cocos2d v3 CCActionCallFunc与对象?

时间:2014-03-02 22:06:31

标签: ios cocos2d-iphone

在cocos2d之前,我曾使用过CCCallFuncN和CCCallFuncND

我试图调用一个函数并将对象发送到函数。我尝试了一些似乎不起作用的实现。我对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]:无法识别的选择器发送到实例0x15f84c50   2014-03-02 16:54:19.768 JuhnerickShooterFinal [22576:70b] * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [CCActionCallBlock elapsed]:无法识别的选择器发送到实例0x15f84c50'

有人可以了解如何将对象从Action中传递给Called函数。

谢谢:)

1 个答案:

答案 0 :(得分: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