在 Cocos2d 3.0 中检测长按

Posted

技术标签:

【中文标题】在 Cocos2d 3.0 中检测长按【英文标题】:Detect long press in Cocos2d 3.0 【发布时间】:2014-04-04 11:55:15 【问题描述】:

我想在我的游戏中检测长按触摸,但问题是Cocos2d 3.0 中的CCTargetedTouchDelegate 不再存在以实现其delegates。我该怎么做?

【问题讨论】:

@LearnCocos2D,可能值得避免使用 3.0 进行标记,以阻止其使用,正如所讨论的 here 我同意 2.x 标签,但不同意 3.0,它与 2.x 及更早版本相差太大。例如,大多数类名都已更改,即使给出简短的 cocos2d 2.x 代码示例的答案也很可能不适用于 3.x,反之亦然。此外,这个问题显然是在询问有关此特定事物如何与 v3.0 一起使用的建议,因此即使根据 Jeff 的定义,该标记在这里也是有效的。 ;) @JamesWebster 哦,我看到您从至少 20 多个问题中删除了 v3 标签。你能撤消标签删除吗?我将此标签添加到 cocos2d 问题中,特别是因为 v3 与早期版本有很大不同。与 cocos2d-3.x 相同。虽然您可以删除 2.x 标签,但不会有任何损失。 嗯。好吧,你肯定让我重新思考,但是我现在已经删除了 all 的标签。然而,实际上我编辑的所有问题都在标题和/或问题中提到了版本号。这不是让它工作的好方法吗?否则,随着新版本的软件/库/等的发布,我们最终会得到一个稀释标签的列表。 【参考方案1】:

CCTargetedTouchDelegate 仍然存在,但已重命名为CCTouchOneByOneDelegate(这只对 2.1+ 有效)

触摸控制似乎已移至CCResponder。它似乎期望您继承它并覆盖触摸方法,而不是委托:

– touchBegan:withEvent:
– touchMoved:withEvent:
– touchEnded:withEvent:
– touchCancelled:withEvent:

但是对于长按,我可能仍会使用UILongPressGestureRecognizer

【讨论】:

【参考方案2】:

http://www.cocos2d-x.org/attachments/1782/XTLayer.zip 下载此文件。它实现了不同的手势

void xtTapGesture(CCPoint position) 
virtual void xtDoubleTapGesture(CCPoint position) 
virtual void xtLongTapGesture(CCPoint position) 
virtual void xtSwipeGesture(XTTouchDirection direction, float distance, float speed) 

您在头文件中扩展 cclayer .. 将其替换为 XTLayer 并将所有触摸事件替换为 xt 而不是 cc。

您可以在http://www.cocos2d-x.org/forums/6/topics/23011获得更多详细信息

希望这会有所帮助。

【讨论】:

以上是关于在 Cocos2d 3.0 中检测长按的主要内容,如果未能解决你的问题,请参考以下文章

Sprite 帧动画 Cocos2d 3.0

Cocos2d 3.0 更新分数

Cocos2d 3.0 中的 3D Action Effects 发生了啥变化?

高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)

cocos2d 3.0 中的 spriteWithSpriteFrameName 等效项?

Cocos2d 3.0继承自Sprite的类在addChild后出现故障