问题标签 [gameplay-kit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - GKShuffledDistribution - 使用上限不会耗尽所有可能的值?
我正在尝试在我的一个应用程序中使用 GKShuffledDistribution,但 nextInt(upperBound:) 方法的工作方式与 nextInt 方法不同,因为它不会耗尽所有可能的值。为了演示,打开一个操场并执行以下操作:
我使用这种方法得到了 2 个重复项。如果我将其替换为:
我没有得到任何重复。这是 nextInt(upperBound:) 应该如何工作的吗?如果是的话,有人可以指出我解释这一点的文档吗?谢谢。
sprite-kit - 让 GKObstacleGraph 与 SKTileMapNode 一起工作
我目前正在使用 Xcode 8,使用 Swift 3 和来自 SpritKit 的新 SKTileMapNode 来制作 2D 地牢爬行类游戏。我无法让 GKObstacleGraph 与 tilemap 一起使用。请帮忙!我尝试遍历 tilemap 障碍层内的所有图块,并为每个图块创建一个多边形并将其存储在 GKObstacleGraph 中。障碍层中的每个瓦片都是一个墙瓦。这张地图看起来像是某种类型的地牢爬行者,所以到处都是墙。我有如下内容:
但是,当我运行该应用程序时,它显示有超过 80000 个节点,寻路路径太多了。任何帮助,将不胜感激。
xcode - Xcode 8 Swift 3 中的 GKComponentSystem
我无法将我的项目转换为 Swift 3。在以前版本的 Swift 中,我可以在 GKComponentSystem 下声明一个类,例如:
但是在 swift 3 中,它迫使我最后添加 < GKComponent > 为:
但似乎我无法像以前那样访问系统中的每个单独组件
行 print("something") 从未被触发。我怎样才能解决这个问题?任何帮助表示赞赏!
ios - GameplayKit > 场景编辑器导航图 > 如何使用它进行寻路?
不久前,苹果在 Xcode 的 Scene Editor 中引入了 GameplayKit 元素,非常棒。但是,我似乎对 Navigation Graph 元素有疑问:
我试图实现的是从场景编辑器中绘制一个 GKGraph,在代码中检索它,并将其用作寻路的基础。
所以我先画一个GKGraph:
然后我像这样在 GameScene.swift 中检索它:
其中graphs是 Apple 预定义的数组,用于存储来自场景编辑器的 GKGraphs。到目前为止,一切都很好。
然后我想让玩家在屏幕上找到点击位置的路径。为此,我将UITapGestureRecognizer与以下回调方法一起使用:
使用这种方法,我让玩家去点击位置。问题是 GameplayKit 返回的路径只包含startNode和endNode,这意味着玩家根本没有在预先绘制的 GKGraph 上行走,而是直接走到endNode。
注意:当我第一次运行NSLog(graph.nodes.debugDescription)时,它会列出所有 10 个预先绘制的节点。当我在graph.connectToLowestCostNode之后再次运行它时,我得到了所有 12 个节点。所以我的图表似乎包含了寻路所需的一切。
你认为是什么问题?为什么graph.findPath不使用预先绘制的 10 个节点来定义路径?您的回答将不胜感激。
ios - GameplayKit > 使代理在目标后停止移动以跟随路径
我通过在其行为中添加目标 toFollow: GKPath 来使代理遵循 GKPath。一切正常,但是当到达路径上的目标点时,代理会继续以类似 8 的形状移动。如何防止代理在到达 GKPath 上的目标点时徘徊?
我想到的一个解决方案是在接近目标点时设置另一个目标 toReachTargetSpeed: 0.0。但是,我不确定最佳实践是什么,因为没有内置的方法可以查看目标何时“完成”。
- 我是否使用 IF 语句来检查每次更新时的目标距离:?性能呢?
- 我使用某种 GKRule 吗?
您的建议将不胜感激。谢谢。
objective-c - 如何在 Objective C 中实现 GKState 的 isValidNextState
似乎 GameplayKit 的所有示例总是在 Swift 中。我决定暂时不使用 swift,我刚刚将大量代码翻译成 Objective C,这在大多数情况下都很好。
我正在尝试isValidNextState
从类中实现该方法GKState
,但是我收到 switch 语句的错误,我不确定它想要什么……在 Swift 中这似乎很好,但在 obj C 中却不行。我得到的错误是:
错误:Statement requires expression of integer type('__unsafe_unretained Class _Nonnull' invalid
我应该在 switch 语句中而不是stateclass
什么?
这是 Swift 中的等价物,效果很好:
objective-c - 使用 GKStateMachine 时在哪里处理鼠标事件
那里没有很多关于使用的信息GKStateMachine
,我想知道应该在哪里处理鼠标事件。在 Apple 的“Dispenser”示例中,它们处理主场景中的鼠标单击事件,我想知道是否应该处理它们,或者每个状态是否可以处理自己的鼠标事件?
我GKStateMachine
首先使用的目的是用于 MacOS SpriteKit 项目(目标 C),我正在努力为锦标赛创建排行榜。在应用程序的设置阶段,我有一个直观的竞争对手列表,我一次点击一个来决定比赛。
sprite-kit - GKEntity 和状态机
我正在使用 SpriteKit 和 GameplayKit 做一个小项目。这是我第一次使用实体/组件系统,我很喜欢它。但是现在,我需要跟踪我的实体状态(产卵、正常、移除),这样它们就不会在产卵阶段进行交互(这可能包括也可能不包括动画的动作)和他们的去除阶段。
到目前为止,我已经创建了一个 EntityStateComponent 实例化具有不同状态的 GKStateMachine ,并且由于不需要每帧更新它并不那么复杂。问题是这种状态与实体相关比与组件相关更多,我想知道从 GKEntity 子类化并在其中添加状态机而不是在组件中是否有意义。
你的意见?
PS:我已经从 GKEntity 子类化只是为了有一个方便的 init() 来创建所有组件
swift - 调用 costToNode:在带有 GameplayKit 的子类 GKGraphNode2D 中
情况
我正在使用 GKObstacleGraph 在以下地图上进行寻路:
橙色区域是障碍物 (GKPolygonObstacle),而紫色点和线是自定义放置的节点 (GKGraphNode2D) 及其各自的连接,实体可以使用它们来传送穿过障碍物。
目标
我认为在方法上是正确的是将紫色节点之间的成本设置为 0(因为它们是门户)。考虑到这一点,我首先将所有紫色节点子类化为 DoorGraphNodes:
然后,我将所有要添加到 GKObstaclesGraph 的 GKGraphNode2D 节点子类化为 GraphNode:
这样,当我调用 barrierGraph.findPath(from: startNode, to: targetNode) 时,理论上 GameplayKit 应该在调用 costToNode: 两个连接(补)紫色(DoorGraphNode)节点之间的方法时收到 0.0。
问题
但在实践中,我得到一个 EXC_BAD_ACCESS 错误,控制台中没有详细信息:
我不认为我在逻辑上做错了什么。你知道为什么会这样吗?
memory-leaks - 在 GameplayKit 中使用 GKStateMachine 泄漏
我遇到了 GKStateMachine 的泄漏问题。我的应用程序是一个非常直接的代码来测试问题。这是游戏场景:
这是我的状态:
问题是当我运行 Leaks 调试器时,我一进入状态就收到一个泄漏。有人有建议吗?