问题标签 [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 - 确定 GKEntity 何时开始和结束遵循 GKPath
我有一个GKAgent2D
附加到我的组件GKEntity
,是否有任何方法可以找出目标中分配给它的GKEntity
开始和结束时间?GKPath
GKGoal(toFollowPath:…)
一旦它到达路径的尽头,我需要让我的精灵消失。
ios - GameplayKit 寻路使用什么算法?
有没有人找到关于 GameplayKit 用于寻路的算法类型的参考?我已经查看了 Apple 的文档,但没有找到任何东西。
最终我很好奇它的性能与没有 GameplayKit 实现的 A* 的对比。虽然我确信 Apple 做得非常出色,但我不想为我不会使用的功能支付性能开销。
我也很好奇,因为我喜欢学习这些类型的机制。
谢谢, 乙
arrays - Swift 数组中的 AnyType 错误
尝试在 Swift 中制作和洗牌卡片组,由名为 cardDeck 的数组中的卡片对象组成。然后我想洗牌。相关代码:
“无法将 [anyobject] 类型的值赋给 logic.card”(“logic”是整个类名,Card 是其中的另一个类)
有谁知道怎么了?我猜该数组不是 AnyObject 类型的数组,因为我将它声明为包含卡片,对吧?
sprite-kit - 在 SpriteKit 错误中向状态机添加动画
大家好,我正在尝试将此动画添加到我的游戏状态中,但出现此错误
覆盖 func didEnterWithPreviousState(previousState: GKState?) {
ios - 程序地图生成 - SpriteKit 和 GameplayKit
我有以下代码使用新GameplayKit
的GKNoise
. 我不确定如何将它与SKTileMapNode
. 有没有人试过这个?目前,噪声应用于每个图块,而不是整体TileMap
。有没有办法将生成的噪声用于整个地图?
swift - 使用 GameplayKit 在网格上查找路径
我正在尝试使用 Apple 的 GameplayKit、SpriteKit 和 Swift。我正试图通过只能从一侧通过的瓷砖进行寻路。
下图显示了两个问题:
左边是一个简单的解决方案,我了解如何从绿色位置移动到红色位置,因为我需要做的就是wall
从图中删除节点(黑色轮廓方块)并计算路径。
图的右侧让我感到困惑。假设我想要在左侧有墙的瓷砖(如图所示),但我仍然希望能够导航到有墙的瓷砖。我如何告诉图表,只有从顶部、底部或右侧而不是左侧接近时,那些在瓷砖左侧有墙壁的瓷砖才能通过?
针对 Alessandro 的评论,我将解释代码的结构。我正在使用TileMapNode
iOS 10 中新引入的 SpriteKit 来表示瓦片地图。每个图块都是一个SKTileDefinition
. 可以设置自定义属性SKTileDefinition
(例如,我可以设置一个Int
来表示瓷砖的顶部、底部、左侧或右侧是否有墙)。地图的实际表示不如您使用 GameplayKit 找到路径的方式重要。据我所见,GameplayKit 仅允许您从图中删除无法通过的节点,但我想做的是将某些节点标记为可通过但仅从特定方向。
这让我觉得这是一个常见问题(因为许多游戏不必牺牲整个瓷砖来代表内墙),但我不知道如何去做。
ios - GameplayKit 委托方法没有被调用
我目前正在SpriteKit
开发一个大型游戏,它在游戏中使用了许多不同的角色和敌人——所有这些都按计划运行得很好。
然而,随着关卡和游戏玩法变得更加复杂,我希望利用 AppleGameplayKit
的功能来改进游戏“思考”的逻辑和易用性以及它的运行效率。
然而,我面临的问题是我似乎根本无法让我的agentWillUpdate:(GKAgent *)agent
或agentDidUpdate:(GKAgent *)agent
委托的方法运行。我对我的角色的移动控制没有任何问题,我对如何GKAgent
控制敌人的移动也没有任何问题,但我无法让这些方法开火。
这是我的头文件OLevel.h:
这是我设置SKScene
OLevel.m的方式:
注意当我将我的敌人添加到场景中时,我将 分配给self.testEnemy
我创建的敌人:
这是我的SKNode
子类OEnemy.h:
这是我的SKNode
OEnemy.m:
我不知道我必须做些什么来实现我的简单目标:
• 我需要我OLevel
的,它GKComponentSystem *agentSystem
只是简单地初始化,将其添加enemyAgent
为一个组件,为它分配一个应该做什么的行为,然后更新连接到该代理的节点的移动。
如果有人能帮助我理解我做错了什么/错过了什么,我将不胜感激。先感谢您。
仅供参考,我已经关注了 Apple 的 AgentsCatalog iOS(目标 C)示例项目,了解它们如何GameplayKit
用于寻找、徘徊、植绒等,但我无法在我的 sprite 项目中重现它们的功能。
ios - 场景暂停时 GameplayKit 不暂停
我有一个 GKAgent2D 控制向目的地移动的 SKNode 敌人的移动。
当我暂停代理正在移动的 SKScene 时,敌人节点似乎继续移动而没有显示出这种移动。所有可见的动作都停止(也就是敌人停止移动)。如果我等待 5 秒然后取消暂停场景,就好像敌人从未停止移动,它突然出现在我没有暂停场景的地方,并且它继续从那个点正常移动。
我查看了 Apple 为用户创建的名为 DemoBots 的示例演示游戏,他们实现了类似于我正在使用的“修复”,只需将update:(NSTimeInterval *)currentTime
方法留给返回即可。这是我的代码目前的样子:
但是我无法更深入地了解他们正在做什么以确保GKGoal
在暂停发生时立即停止当前有效的目标。我什至记录了 agentDidUpdate 方法,当我暂停场景时它会停止触发,所以我真的不确定它是如何继续移动的。
如果有人知道答案,请告诉我。谢谢!
更新:我什至尝试暂停目标设置为移动的各个节点:
但这仍然没有阻止GKGoals
他们在不暂停场景的情况下继续进行。
更新 2:停止代理冷的唯一解决方案实际上是消除代理系统的目的:
这是一个非常可悲的解决方案,因为我希望有一种更优雅/更合适的方式来停止目标,而不会将所有内容完全从场景中移除。然而,另一个问题是即使这样,在取消暂停时重置目标也会产生同样的问题,即如果没有发生暂停,他们会跳到他们所处的位置。
ios - GameplayKit 的障碍
这是我的问题:
- 如何将
SKSpriteNode
数组转换为数组,GKObstacles
以便代理可以使用/ 适当地避开goalToAvoidObstacles:(nonnull NSArray<GKObstacle *> *) maxPredictionTime:(NSTimeInterval)
这些障碍?
似乎我创建GKObstacle
数组的方式不允许GKGoal
正确地将这些识别为障碍,无论我给目标赋予什么权重。
我目前有几个SKNode
s 添加到SKScene
chapterScene中。这些节点中的每一个都被添加到我正在存储的名为barrierArray的数组中。我已经通过以下方式设置了一个运行良好的测试:
工作障碍
虽然这工作得很好,但我遇到的问题是我无法识别SKNode
我作为障碍物的身体数组的行为。我只能让这些手动创建GKCircleObstacle
的项目注册为代理避免的有效障碍。这是一个问题的原因是因为我依赖的许多障碍实际上不是简单的圆圈,而是多边形结构有些复杂,有些更简单。尽管如此,我正在尝试以下操作,但我的代理似乎没有避免任何SKNode
这种方式的障碍:
没有工作障碍
不幸的是,这似乎不起作用,因为无论我将权重设置多高,代理都不会响应避开障碍物。这是我传递给它的数组的日志:
其中的每一个都已被清晰而适当地初始化并添加到场景中。实际上,这些元素中的每一个都对该SpriteKit
didBeginContact:(SKPhysicsContact *)contact
方法做出响应,因此节点似乎正在正确处理它们应该拥有的边界。
如果有人知道我做错了什么或更好的方法将这些“障碍节点”中的每一个变成GKObstacle
's,我将不胜感激。提前致谢!
更新:这是一个我正在测试的带有物理主体的节点:
这是身体的样子skView.showsPhysics = YES;
:
所以我知道物理身体是我需要的。但是,当我尝试GKObstacle
从该主体创建时,在避免障碍目标中分配时,它似乎没有注册为障碍。
ios - GameplayKit GKPolygonObstacle 不适用于 GKGoal
与我在这里发布的问题类似,我现在意识到这个问题比我预期的更微不足道,因为这适用于某些元素GameplayKit
但不适用于其他元素。
我有一个障碍物 an SKNode
,我试图将它定义为一个GKPolygonObstacle
可以被代理使用的 a GKAgent2D
,作为在SKScene
我设置的移动时要避免的障碍物。
我查看了Apple 的 AgentsCatalog以了解他们如何GKObstacle
在方法中使用代理GameplayKit
:
当我在自己的项目中使用以下代码创建GKCircleObstacle
对象时,我发现代理可以很好地导航并很好地避开这些圆形障碍物,具体取决于我赋予它的权重(重要性级别)。
这是我正在使用的代码:
使用以下方法创建和添加这些障碍:(这是直接从 Apple 的 AgentsCatalog 源代码中提取的)
当敌人试图移动到场景中某个变化的位置时,它会避开这些圆圈,这很有效。
问题
当我尝试GKGoal
通过使用GKPolygonObstacle
对象代替对象来重新创建此行为时GKCircleObstacle
,敌方代理似乎无法将多边形障碍识别为行为目标要避免的障碍。以下是我尝试添加这些障碍的方法:
最令人沮丧的是,我知道数组正确地创建了一个NSArray
对象GKPolygonObstacle
,因为我也使用这种方法进行寻路(在我决定痛苦地实现GameplayKit
它是寻找、避免和徘徊目标之前)。这是我使用这个innerMapArray 的方式:
这个方法很好地返回了最有效的路径应该包括绕过障碍物的点,我告诉敌人在试图到达一个位置时要避开。
- 所以真正的问题变成了:为什么
GKGoal
接受GKCircleObstacle
对象而不接受GKPolygonObstacle
对象?
如果有人可以帮助我弄清楚如何将这些SKNode
对象转换为注册的可接受的障碍物,GKGoal
我将非常感激。谢谢你。