1

我正在使用 Cocos2D 制作一个简单的游戏。用户可以触摸和追踪小移动物体的路径。然后对象跟随路径。这类似于飞行控制游戏机制。

我的代码几乎一直运行良好。但是有时我尝试触摸和拖动对象但触摸回调不会触发。以下是我的代码的一般工作方式:

  • 小移动物体继承CCLayer
  • 我正在使用具有单个触摸参数(ccTouchMoved:withEvent:等)的触摸回调
  • 所有回调ccTouchBegan:withEvent:都在对象上(而不是主游戏层)

如何改进触摸处理以避免上述错误?

到目前为止,这是我的想法:也许触摸回调没有触发,因为对象(总是在移动)在用户尝试触摸对象的时候略微移动。这可以通过使用具有触摸集合作为参数的回调处理主游戏层上的触摸来解决。由于总对象数量相对较少(比如少于 50 个),我可以将每个触摸位置与每个对象进行比较。

我还尝试增加对象的可触摸区域(注意 1.5 乘法)。这似乎有所帮助,但并没有消除问题。

- (BOOL) ccTouchBegan:(UITouch *) touch withEvent:(UIEvent *) event {
    CGSize size = self.contentSize;
    CGRect rect = CGRectMake(-size.width  / 2.0, 
                             -size.height / 2.0, 
                              size.width  * 1.5, 
                              size.height * 1.5);
    return CGRectContainsPoint(rect, [self convertTouchToNodeSpace:touch]);
}

另一件要尝试的事情是提高对象的速度,看看回调是否不会更频繁地触发。此刻物体缓慢移动。

任何帮助深表感谢!

4

1 回答 1

1

IIRC, node's origin is in its bottom left corner. Try

CGRect rect = CGRectMake(0, 0, size.width, size.height);
return CGRectContainsPoint(rect, [self convertTouchToNodeSpace:touch]);
于 2012-08-16T16:29:59.970 回答