问题标签 [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.

0 投票
1 回答
85 浏览

swift - GKShuffledDistribution - 使用上限不会耗尽所有可能的值?

我正在尝试在我的一个应用程序中使用 GKShuffledDistribution,但 nextInt(upperBound:) 方法的工作方式与 nextInt 方法不同,因为它不会耗尽所有可能的值。为了演示,打开一个操场并执行以下操作:

我使用这种方法得到了 2 个重复项。如果我将其替换为:

我没有得到任何重复。这是 nextInt(upperBound:) 应该如何工作的吗?如果是的话,有人可以指出我解释这一点的文档吗?谢谢。

0 投票
1 回答
554 浏览

sprite-kit - 让 GKObstacleGraph 与 SKTileMapNode 一起工作

我目前正在使用 Xcode 8,使用 Swift 3 和来自 SpritKit 的新 SKTileMapNode 来制作 2D 地牢爬行类游戏。我无法让 GKObstacleGraph 与 tilemap 一起使用。请帮忙!我尝试遍历 tilemap 障碍层内的所有图块,并为每个图块创建一个多边形并将其存储在 GKObstacleGraph 中。障碍层中的每个瓦片都是一个墙瓦。这张地图看起来像是某种类型的地牢爬行者,所以到处都是墙。我有如下内容:

但是,当我运行该应用程序时,它显示有超过 80000 个节点,寻路路径太多了。任何帮助,将不胜感激。

0 投票
1 回答
120 浏览

xcode - Xcode 8 Swift 3 中的 GKComponentSystem

我无法将我的项目转换为 Swift 3。在以前版本的 Swift 中,我可以在 GKComponentSystem 下声明一个类,例如:

但是在 swift 3 中,它迫使我最后添加 < GKComponent > 为:

但似乎我无法像以前那样访问系统中的每个单独组件

行 print("something") 从未被触发。我怎样才能解决这个问题?任何帮助表示赞赏!

0 投票
1 回答
1069 浏览

ios - GameplayKit > 场景编辑器导航图 > 如何使用它进行寻路?

不久前,苹果在 Xcode 的 Scene Editor 中引入了 GameplayKit 元素,非常棒。但是,我似乎对 Navigation Graph 元素有疑问: 场景编辑器导航图

我试图实现的是从场景编辑器中绘制一个 GKGraph,在代码中检索它,并将其用作寻路的基础。

所以我先画一个GKGraph:

场景编辑器绘制的 GKGraph

然后我像这样在 GameScene.swift 中检索它:

其中graphs是 Apple 预定义的数组,用于存储来自场景编辑器的 GKGraphs。到目前为止,一切都很好。

然后我想让玩家在屏幕上找到点击位置的路径。为此,我将UITapGestureRecognizer与以下回调方法一起使用:

使用这种方法,我让玩家去点击位置。问题是 GameplayKit 返回的路径只包含startNodeendNode,这意味着玩家根本没有在预先绘制的 GKGraph 上行走,而是直接走到endNode

注意:当我第一次运行NSLog(graph.nodes.debugDescription)时,它会列出所有 10 个预先绘制的节点。当我在graph.connectToLowestCostNode之后再次运行它时,我得到了所有 12 个节点。所以我的图表似乎包含了寻路所需的一切。

你认为是什么问题?为什么graph.findPath不使用预先绘制的 10 个节点来定义路径?您的回答将不胜感激。

0 投票
1 回答
472 浏览

ios - GameplayKit > 使代理在目标后停止移动以跟随路径

我通过在其行为中添加目标 toFollow: GKPath 来使代理遵循 GKPath。一切正常,但是当到达路径上的目标点时,代理会继续以类似 8 的形状移动。如何防止代理在到达 GKPath 上的目标点时徘徊?

我想到的一个解决方案是在接近目标点时设置另一个目标 toReachTargetSpeed: 0.0。但是,我不确定最佳实践是什么,因为没有内置的方法可以查看目标何时“完成”。

  1. 我是否使用 IF 语句来检查每次更新时的目标距离:?性能呢?
  2. 我使用某种 GKRule 吗?

您的建议将不胜感激。谢谢。

0 投票
1 回答
224 浏览

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 中的等价物,效果很好:

0 投票
1 回答
78 浏览

objective-c - 使用 GKStateMachine 时在哪里处理鼠标事件

那里没有很多关于使用的信息GKStateMachine,我想知道应该在哪里处理鼠标事件。在 Apple 的“Dispenser”示例中,它们处理主场景中的鼠标单击事件,我想知道是否应该处理它们,或者每个状态是否可以处理自己的鼠标事件?

GKStateMachine首先使用的目的是用于 MacOS SpriteKit 项目(目标 C),我正在努力为锦标赛创建排行榜。在应用程序的设置阶段,我有一个直观的竞争对手列表,我一次点击一个来决定比赛。

0 投票
1 回答
443 浏览

sprite-kit - GKEntity 和状态机

我正在使用 SpriteKit 和 GameplayKit 做一个小项目。这是我第一次使用实体/组件系统,我很喜欢它。但是现在,我需要跟踪我的实体状态(产卵、正常、移除),这样它们就不会在产卵阶段进行交互(这可能包括也可能不包括动画的动作)和他们的去除阶段。

到目前为止,我已经创建了一个 EntityStateComponent 实例化具有不同状态的 GKStateMachine ,并且由于不需要每帧更新它并不那么复杂。问题是这种状态与实体相关比与组件相关更多,我想知道从 GKEntity 子类化并在其中添加状态机而不是在组件中是否有意义。

你的意见?

PS:我已经从 GKEntity 子类化只是为了有一个方便的 init() 来创建所有组件

0 投票
1 回答
217 浏览

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 错误,控制台中没有详细信息: 在此处输入图像描述

我不认为我在逻辑上做错了什么。你知道为什么会这样吗?

0 投票
1 回答
190 浏览

memory-leaks - 在 GameplayKit 中使用 GKStateMachine 泄漏

我遇到了 GKStateMachine 的泄漏问题。我的应用程序是一个非常直接的代码来测试问题。这是游戏场景:

这是我的状态:

问题是当我运行 Leaks 调试器时,我一进入状态就收到一个泄漏。有人有建议吗?