在之前的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
。