我正在使用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]);
}
尝试的另一件事是提高对象的速度,看看回调是否不会更频繁地触发。此刻物体移动缓慢。
非常感谢任何帮助!
答案 0 :(得分:1)
CGRect rect = CGRectMake(0, 0, size.width, size.height);
return CGRectContainsPoint(rect, [self convertTouchToNodeSpace:touch]);