的cocos2d-iphone。 “touchBegan”方法并返回一个值

时间:2014-04-15 17:37:58

标签: ios objective-c cocos2d-iphone return-value

我正在使用cocos2d-iphone 3.0开发游戏。我使用这个bool来使代码内部(在用户触摸精灵之后)只实现一次。当用户第二次触摸精灵时,将不会执行此代码。唯一的问题是,Xcode表示touchBegan方法不应返回值(return NO ;)。我怎样才能改变方法,所以不会有错误?我应该改变别的吗?这种方式是否正确?

bool firstClicked = false;
-(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
 if(firstClicked==true)
 {
    return NO ;
 }


CGPoint location = [touch locationInView: [touch view]];
CGPoint convertedlocation = [[CCDirector sharedDirector] convertToGL: location];
CGPoint convertedNodeSpacePoint = [self convertToNodeSpace:convertedlocation];

if (CGRectContainsPoint([_sprite boundingBox],convertedNodeSpacePoint))
    {  firstActFirstTimeClicked=true;
.......// some code. not important 
} }

2 个答案:

答案 0 :(得分:0)

如果您只需要执行一次,则需要停用精灵上的触摸功能。所以在你的custom overriden sprite中只需做这样的事情:

-(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
 {
    // Do awesome game related code over here
    self.userInteractionEnabled = NO;
 }

这应该适用于自定义CCSrpite。这样您就不必处理场景中所有愚蠢的位置代码,并且您已准备好使用一行代码。

显然,您需要在创建CCSprite时启用用户互动,以便首先调用touchBegan

答案 1 :(得分:-1)

不要返回BOOL。如果只想运行一次代码,那么只需从方法返回即可。无需返回BOOL NO。试试这个..

 bool firstClicked = false;
 -(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
   if(firstClicked==true)
     {
        return;
     }


     CGPoint location = [touch locationInView: [touch view]];
     CGPoint convertedlocation = [[CCDirector sharedDirector] convertToGL: location];
     CGPoint convertedNodeSpacePoint = [self convertToNodeSpace:convertedlocation];

     if (CGRectContainsPoint([_sprite boundingBox],convertedNodeSpacePoint))
       {  firstActFirstTimeClicked=true;
          .......// some code. not important 
       } }