当前位置:  开发笔记 > IOS > 正文

如何检测cocos2d中的触摸?

如何解决《如何检测cocos2d中的触摸?》经验,为你挑选了4个好方法。

我正在使用cocos2d为iPhone开发一款2D游戏.

我在游戏中使用了很多小精灵(图像).我想触摸两个相似类型的精灵(图像),然后两个精灵(图像)将被隐藏.

如何检测特定精灵(图像)中的触摸?



1> 小智..:

更好的方法是实际使用精灵本身的边界框(这是一个CGRect).在这个示例代码中,我将所有精灵放在NSMutableArray中,并且我简单地检查精灵触摸是否在边界框中.确保在init中打开触摸检测.如果你注意到我也通过返回YES(如果我使用触摸)或否(如果我不这样做)接受/拒绝图层上的触摸

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{
  CGPoint location = [self convertTouchToNodeSpace: touch];

  for (CCSprite *station in _objectList)
  {
    if (CGRectContainsPoint(station.boundingBox, location))
    {
      DLog(@"Found sprite");
      return YES;
    }
  }

  return NO;
}


我同意这更好,因为它非常干净

2> David Higgin..:

按照乔纳斯的指示,再添加一点......

- (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
   UITouch* touch = [touches anyObject];
   CGPoint location = [[[Director sharedDirector] convertCoordinate: touch.location];
   CGRect particularSpriteRect = CGMakeRect(particularSprite.position.x, particularSprite.position.y, particularSprite.contentSize.width, particularSprite.contentSize.height);
   if(CGRectContainsPoint(particularSpriteRect, location)) {
     // particularSprite touched
     return kEventHandled;
   }
}

您可能需要调整x/ya以适应Cocos中的"居中定位"


+1教我CGRectContainsPoint在CocosLand中工作.
我喜欢CGRectContainsPoint; 但是,CGMakeRect应该是CGRectMake,除此之外,我只会使用:CGRect specificSpriteRect = [specialSprite boundingBox];
cocos2d中没有convertCoordinate和touch.location

3> Jonas..:

在包含您的精灵的图层中,您需要说:

self.isTouchEnabled = YES;

然后你可以使用你在UIView中使用的相同事件,但它们的命名有点不同:

- (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
   UITouch* touch = [touches anyObject];
  //in your touchesEnded event, you would want to see if you touched
  //down and then up inside the same place, and do your logic there.
}


我不确定你是什么意思......哪种特别的触摸?

4> John..:

@david,你的代码有一些关于cocos 0.7.3和2.2.1的拼写错误,特别是CGRectMake而不是CGMakeRect,[touch location]现在是[touch locationInView:touch.view].

这就是我做的:

- (BOOL)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch * touch = [touches anyObject];

    CGPoint location = [[Director sharedDirector] convertCoordinate: [touch locationInView:touch.view]];
    CGRect myRect = CGRectMake(sprite.position.x, sprite.position.y, sprite.contentSize.width, sprite.contentSize.height);


    if(CGRectContainsPoint(myRect, location)) {
        // particularSprite touched
        return kEventHandled;
    }
}

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有