在之前的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过去了]:无法识别的选择器已发送到实例0x15f84c50
  2014-03-02 16:54:19.768 JuhnerickShooterFinal [22576:70b] *由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“-[CCActionCallBlock逝去]:无法识别的选择器已发送到实例0x15f84c50”


有人可以阐明如何将对象从Action传递到Called函数中的方法。

谢谢 :)

最佳答案

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

07-25 22:14