问题标签 [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.
ios - GKGraph 使用 GKGraphNode2D 子类节点错误地计算路径
我开始调查这个问题,这个问题在 iOS 9.2 SDK 中得到了部分解决。
然而,经过进一步调查,我意识到这个框架仍然没有按预期工作。
总之,aGKGraph
可以用节点(GKGraphNode
及其子类)构建,在这些节点之间可以计算寻路成本和路径。AGKGraphNode2D
只是一个GKGraphNode
位于二维网格上并将其坐标封装在二维网格中的 a。GKGraphNode
可以被子类化,并且方法costToNode(_:)
和estimatedCostToNode(_:)
可以被覆盖以提供节点之间的成本。将这些自定义节点添加到图形后,图形应使用这些方法来确定连接节点之间的最低成本路径。
我正在构建我将调用的节点GeometricNode
,其中节点之间的成本只是两个节点之间的距离(在二维坐标空间中)。节点连接到 2D 空间中的所有邻居,包括对角线邻居。即,特定节点的上方、下方、左侧和右侧的相邻节点相距一段距离1
,而对角相邻的节点相距一段sqrt(2) ~ 1.414
距离。这些成本在被覆盖的方法costToNode(_:)
和中计算estimatedCostToNode(_:)
。
不幸的是,即使正确设置了这些连接,并且适当地计算了成本,GKGraph
在调用时并不总是计算正确的路径findPathFromNode(_:toNode:)
。
代码(示例项目)
和失败的测试:
swift - 在 Swift 中将 Class 作为值存储在 Dictionary 中的语法是什么?
可以说我想这样做:
然后后来:
不工作。
如果我输入foobar.Type
,它也不起作用。
如果我输入foobar.class
as foobar.Type
,它也不起作用。
我想要这个的原因是因为系统 API 中有一个将类作为参数的方法,例如:
(在 GKStateMachine 中)
我发现能够获得一个字符串并将其变成一个类是可以接受的。
swift - 如何解释物理体位掩码系统的这个 Swift SpriteKit 示例代码
我深入研究了 Apples SpriteKit 和 GameplayKit 示例代码,发现了一个用 Swift 编写的名为“DemoBots”的项目。在那些项目中使用了一些非常有趣的概念,我想将它们应用到我的项目中。
我已经在将碰撞处理封装到一个处理程序类中,这与该示例代码中处理冲突的方式非常相似。
在这个项目中,我为一个名为的结构找到了以下代码RPColliderType
:
每次设置这样的 // 属性时都会使用这个结构.collisionBitmask
:(我.contactBitmask
已经使用组件和实体设计指南实现了这个).categoryBitmask
SKPhysicsBody
到现在为止还挺好。来自 Objective-C 我的问题是我不完全理解 RPColliderType 结构中的以下代码行是做什么的:
这是否意味着每次我调用该计算属性时(这就是它们在 swift 中的调用,对吗?)属性 - 当我将它分配给 a 时我会这样做SKPhysicsBody
- 它会将它添加到那些静态类字典中。但我在解释 ' mask
' / ' reduce
' / ' union
' 命令时遇到问题。
那真的有什么作用?
ios - 在 Gameplaykit 中,如何在 GKAgent2D 行为中添加延迟 GKGoal 时间?
我有GKEntity
一个GKAgent2D
组件。它的行为GKGoal
是toWander:
和toStayOnPath:maxPredictionTime:
。实体在场景中不断游荡;但是,我希望它停止徘徊一段时间。例如,如果实体是一只四处游荡的羊,我希望它定期停下来吃东西,并在延迟之后再次开始游荡。
更新:
在实体中:
移动空闲组件
流浪行为:
我怎样才能做到这一点?
提前致谢
swift - 如何使用 Swift Gameplaykit 中的 GKRandomSource 来随机提问
我是 Swift 和 iOS 开发的新手,并且正在学习一些在线课程。在一门课程中,我完成了一个 iPhone 测验应用程序。所有的问题和可能的答案都是从 .json 文件中加载的,我们处理的代码会随机选择一个问题供用户回答。这很好用,只是随着时间的推移问题会重复出现,所以我一直在寻找防止这种情况发生的方法。
在几次尝试让应用程序存储随机选择并将它们从剩余问题的整体池中删除的尝试失败后,我意识到更有效的方法是最初将问题打乱,然后一一询问。
所以,我做了一些挖掘,发现了所谓的 Fisher-Yates shuffle 并且一直试图找到一种方法来实现这一点。然后我从 Swift 的 Gameplaykit 中找到了使用 GKRandomSource 来洗牌的参考,所以我一直在尝试使用它来解决问题,但似乎无法让它发挥作用。
以下是我迄今为止在代码等方面尝试过的内容。
所有问题和可能的答案选择都存储在 .json 文件中,如下所示:
我使用以下代码加载 .json 文件:
下面是我用来尝试实现所有问题的随机播放的代码:
我使用一个标签来显示问题,并使用四个图像来显示可能的答案,使用以下代码:
最后,在用户回答问题后,我使用以下代码向用户显示“下一步”按钮:
现在,虽然我认为这一切都应该奏效,但事实并非如此。虽然应用程序加载正常,但它始终会向用户显示 .json 文件中的第一个问题,并且每次点击“下一步”按钮时都会重复相同的问题。
我怎样才能得到这个来洗牌所有的问题,然后一个接一个地问他们?让我知道是否需要包含更多代码。
ios - Gameplaykit GKState,带有两个参数的快速函数
我相信这对你来说是一个简单的问题。
如何用一个 GKState 编写一个带有两个参数的函数?
更新
苹果使用
func willExitWithNextState(_ nextState: GKState)
如果我使用somefunc(state:GKState)
效果很好
虽然somefunc(state:GKState, string:String)
不起作用,为什么???
其他示例
我试过这个:
解决方案感谢@0x141E
谢谢您的回复
swift - 我如何使用 Swift Gameplaykit 中的 GKRandomSource 来“播种”以记住会话之间的随机播放
我是编程新手,通过学习一些在线课程一直在学习 Swift。在其中一门课程中,我们构建了一个基本的琐事游戏,我一直在尝试通过自己编写代码来改进它(最好的学习方式!)。
最近我遇到了所谓的 Fisher-Yates 洗牌,经过多次试验和错误(在堆栈溢出社区的帮助下),我能够使用 Swift Gameplaykit 中的 GKRandomSource 来洗牌我的琐事问题,以便他们被随机询问. 这是对我使用的原始 arc4random 代码的改进,因为随机播放从整个问题池中删除了已经提出的问题,从而确保它们不会重复(至少在 iOS9 中)。
这在会话中运行良好,但是一旦用户退出应用程序并重新启动它,随机播放将从头开始。所以我正在寻找一种方法让应用程序“记住”会话之间已经提出的问题。我的研究使我产生了播种的想法,我一直试图让它与我的 GKRandomSource 代码一起使用,但我显然遗漏了一些东西。
任何建议等都会受到欢迎 - 特别是因为我不完全确定这种“播种”方法将实现我的最终目标,即不重复在应用程序的前几节中已经提出的问题。
以下是我认为是我修改后的代码的相关部分。
所有问题和可能的答案选择都存储在 .json 文件中,如下所示:
我使用以下代码加载 .json 文件:
下面是我最近尝试实现所有问题的洗牌并在以后的会话中复制它的代码):
我至少知道上面的代码有问题,但我很茫然。我也在想,也许我在储存种子方面错过了一步?
为了完整起见,我使用一个标签来显示问题,并使用四个图像来显示可能的答案,使用以下代码:
最后,在用户回答问题后,我使用以下代码向用户显示“下一步”按钮:
我知道我的编码可能非常冗长且不必要,但在最新的改进之前,它一直运行良好,我实际上了解其中的大部分内容(我想!)
ios - 如何在 GameplayKit 中显示 GKPath
有没有显示 GKPath 的技巧?
例如我的路径:
我正在寻找一个简单的函数来显示这条路径。谢谢
objective-c - GKGridGraph 查找路径不起作用
我正在尝试制作基于回合的游戏,每个敌人都应该找到通往玩家节点的路径。我正在使用gameplaykit的寻路,每次敌人必须转弯时,我都会确保从该GKGridGraph中移除其他敌人(这样敌人就不会互相踩踏),然后我添加相同的节点。
如果我注释掉行 removeNodes 和 addNodes 一切正常。
编辑:每次创建可以返回生成的 GKGridGraph 的新类对象,而不是重新分配同一个对象,这是一个好主意吗?
ios - 如何以允许使用 GKStateMachine 再次输入的方式保存以前的状态?
我正在使用 GKStateMachine 来跟踪我的游戏中瓷砖的状态。
当我放置一个物品时,该物品所覆盖的瓷砖会进入“计划”状态。我怎样才能存储瓷砖,然后在以后将瓷砖恢复到以前的状态?
这是我认为与我的问题相关的代码部分。很高兴分享更多关于特定要求的信息。
和状态机:
要点:https ://gist.github.com/Relequestual/dac6d51c923e5ce4224e
如果我将previousState设置为previousState,我就不能使用该变量进入状态......
编译时错误: