SpriteKit/Scenekit TouchesBegan 或 GestureRecognizer

Posted

技术标签:

【中文标题】SpriteKit/Scenekit TouchesBegan 或 GestureRecognizer【英文标题】:SpriteKit/Scenekit TouchesBegan or GestureRecognizer 【发布时间】:2018-02-07 18:04:26 【问题描述】:

对于覆盖场景和节点子类中的 touchesBegan 等的游戏,是否有最佳实践,而不是使用手势识别器?

我知道 Apple 的模板中有 override func touchesXXXX 方法,这允许更多的控制(除非使用自定义识别器)。但是很多教程似乎都使用了 GestureRecognizer 的方法。

这主要是使事情变得更容易的教程,还是更常见的是使用 GestureRecognizer 路线来消除一些复杂性?我知道这可能归结为开发人员的偏好,但我正在寻找“最佳实践”——Apple 在制作游戏时是否真的建议一种方法?

【问题讨论】:

【参考方案1】:

我也想知道同样的事情 - 当您将 SceneKit 和 SpriteKit 混合在一起时,它会变得更加有趣。我还没有看到任何官方文档建议其中一种,因为它们实际上是针对略有不同的事物。您会发现 Xcode 游戏模板使用一种或另一种(或两者,在跨平台 spritekit 游戏的情况下)。

我认为大多数教程和博客使用 GestureRecognizer 方法的原因是它为您做了很多工作,但是当您遇到更复杂的用例时,您可能会发现您需要手动处理触摸和自己处理手势(互联网上流传着一些例子),就像我在某个特定项目中必须做的那样。

我还阅读了一些博客,有时将触摸方法和 GestureRecognizers 一起使用会产生不正确的结果(特别是缺少触摸),但这可能是陈旧的信息 - 如果您决定同时使用这两种方法,则值得检查一下。

所以要回答这个问题,我认为没有官方的最佳做法,因为这两种方法都是有效的和当前的方法。我会说使用您认为更合适的任何一个,并使代码尽可能简单和干净。

【讨论】:

我同意同时使用直接触摸识别和 UIGestureRecognizers 会导致麻烦。如果有最佳实践,您可能应该使用手势识别器(如果您的 UI 可以自然地使用它们),并对更复杂的用例进行直接触摸识别。 (即,与仅使用普通 UIKit 相同。)与生产力应用程序相比,游戏往往具有更具体的 UI 需求,因此您可能会在游戏空间中看到更明确的触摸跟踪,但可能有很多用例,即使在手势识别器很好的游戏中也是如此。【参考方案2】:

如果您只想响应屏幕上的触摸,请使用 3 种标准“触摸”方法。

如果您需要对不同的滑动、平移、捏合等做出响应,那么您将需要手势识别器。

【讨论】:

以上是关于SpriteKit/Scenekit TouchesBegan 或 GestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章

iOS之SceneKit.h文件简介

android SwitchButton 和CheckBox 怎样设置不可点击,Clickable无效

UIScrollView touchesBegan

UITextField 方法和代理的使用

iOS 手势大全

iOS事件(触摸,移动,晃动)