1

使用 Cocos2D 创建射击游戏子弹地狱风格的游戏。一根手指拖动移动船,角落里有火层。

从我的主层,我检测到 ccTouchesBegan、ccTouchesMoved 和 ccTouchesEnded。我将一个 CGPoint 传递给我的逻辑控制器。

如果着陆点位于 2 个“触发按钮”层之一内,那么我会触发触发事件。否则我为玩家飞船设置一个新位置。当触摸移动到火层区域之外时,我为玩家船设置了一个新位置。

问题:由于“触摸移动设置玩家位置”规则,将手指从火层内拖动到非火层空间会导致船跳到该点。

我怎样才能更好地构建这个?

也许我需要一个“触摸对象”数组,并在穿过火层边界时将它们无效。我觉得我在这里遗漏了一些关于触摸处理的重要概念,如果理解的话,它将提供我想要的控制,而不必破解一个“触摸对象”类,该类将您点击的位置与一系列位置进行比较。

请指教。谢谢!

(是的,我看到了:当层重叠时,如何将触摸处理限制在一层?。这并没有回答我的问题。rectContainsPoint 是我如何确定触摸是在火层内还是火层外)。

4

1 回答 1

1

你能不能在touchesBegan中设置一个标志(一个BOOL ivar)来表示触摸是从火区开始的,如果设置了这个标志,就不要移动船了?您将在 touchesEnded 处重新设置它。

这听起来太简单了,所以我可能遗漏了一些东西。

我确实是。要处理多点触控,您将需要一个数组,正如您在问题中猜测的那样 - 触摸开始时,如果触摸位于火区,请将其添加到数组中,然后不允许该触摸随后移动船。触摸结束时删除。除了 UITouch 文档中的这个注释之外,我没有看到任何错误或 hacky:

UITouch 对象在多点触控序列中是持久的。在处理事件时,您永远不应该保留 UITouch 对象。如果您需要将有关触摸的信息从一个阶段保存到另一个阶段,您应该从 UITouch 对象中复制该信息。

但坚持似乎支持你想做的事。不知道cocos2d中是否使用了不同的类,但原理是一样的。

于 2011-12-17T07:34:27.247 回答