问题标签 [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 回答
313 浏览

swift - GKAgentDelegate 的协议方法在 Swift 中不对?

在 GameplayKit 中,我想符合 GKAgentDelegate 协议,因此使用委托方法func agentDidUpdate(agent: GKAgent)

问题是,在这个方法中,参数agent被声明为GKAgent,而不是GKAgent2D,所以我无法访问agent.position,因为position属性在GKAgent2D,而不是GKAgent...

然而在 Objective-C API 中,代理被声明为 GKAgent2D。

请帮忙。

0 投票
2 回答
684 浏览

swift - GKMinmaxStrategist 从哪里开始?

我想知道这里是否有人使用 GKMinmaxStrategist 运气好。这个类/功能在 WWDC 上被展示过,但大部分示例代码都是用 Objective-C 编写的,这令人失望。

GameplayKit 的 WWDC 视频展示了另一款游戏 Stone Flipper (Reversi/Othello),但他们尚未发布代码(还没有?)。

有没有人有这方面的运气?我希望只用一个简单的井字游戏来尝试这个,但我完全不知道如何开始。

0 投票
0 回答
1155 浏览

sprite-kit - GameplayKit Pathfinding with obstacles and agents

I've been searching for days about this new framework and trying to make usage of some of it's funcionalities, but... there're some things that are not fitting together for me, the demobot source code isn't helping at some points, I miss some kind of simple tutorial but here goes my main doubts:

So, when I try to draw this graph and see the connections, I get this: http://i.imgur.com/EZ3dx5v.jpg I find it really weird, anywhere I put my obstacles, even in low numbers, the left-corner portion of the screen have always more connections(the radius don't have influence on that)

I don't use GKComponents on my game, but I tried to run some GKAgents2D to hunt the player, like this:

Now when I call the updateWithDeltaTime method, his delegate methods: func agentWillUpdate(agent: GKAgent){} func agentDidUpdate(agent: GKAgent){} give me unexpected values for the agents, it's position doesn't make any sense, with giant numbers that leads to outside of the battlefield

But I saw that the his velocity vector were making sense, so I matched it to my monster and updated the agent to the monster's position

Now I was getting some results, but it's far away from what I want: The monsters are not following the character to the edges or the right-top portion of screen, I remove their points from the graph but after make a path for them to follow (the image doesn't have this points, but they exists). Apparently because there was no path leading to there, remember the image?

The question is: how to make this agent system to work?

Maybe I'm totally wrong at the usage of agents, goals and even the graphs! I read the documentation but I still can't make it right And more... At first, the monster were not avoid obstacles, even with GKGoals like "avoidObstacles", passing the same PolygonObstacles, but when I change

to

it worked! o.O

I really need some help, thank you all :D!

0 投票
1 回答
420 浏览

ios - `-costToNode:` 未发送到 GameplayKit 中的 GKGraphNode2D 子类

我有一个关于 Apple 新 GameplayKit 的愚蠢问题。

我正在为我的游戏创建一个基于 2D 网格的节点布局。我最喜欢 的功能GKGraphNode2D,但想以一种方式对其进行调整。我想在遍历某种节点对时有条件地添加惩罚。换句话说,我希望一些节点以直接的方式连接,并且一些节点连接起来,以便它们的遍历距离被我的应用程序修改。

我认为子类化GKGraphNode2D和覆盖-costToNode:并且-estimatedCostToNode:会完美地工作!我super有时会返回由提供的值,并在其他时间为我的游戏调整它。这两个方法是方法GKGraphNode,超类GKGraphdNode2D

不幸的是,当我尝试这样做时,似乎-costToNode:并且-estimatedCostToNode:从未在我的GKGraphNode2D子类上调用过。当我调用包含一堆我的-findPathFromNode:toNode:子类对象的对象时,我希望这些方法被调用。GKGraphGKGraphNode2D

我究竟做错了什么?

编辑:

以下是我的代码。

创建两个类CheapNodeExpensiveNode,它们是 的子类GKGraphNode2D,如下所示:

然后在测试中,我创建了一些节点,将它们连接起来,将它们添加到图表中,并将findPathFromNode:toNode:消息发送到图表。然后,我检查了图表找到的路径,但没有找到我所期望的。

这个测试用例失败了。我还注意到estimatedCostToNode:并且costToNode:从未发送到我的GKGraphNode2D子类(由日志语句和断点验证)。

是一个演示此问题的示例项目。它应该在最新的 Xcode 开发人员测试版(截至 2015 年 8 月 31 日,Xcode beta 6)上构建和运行。

编辑2:

如果有人对复制感兴趣,我已将这个 StackOverflow 问题中的示例代码和描述作为错误 ( http://www.openradar.me/22524760 ) 提交。如果 iOS 9 发布后该 bug 仍然存在,我将使用开发人员支持票来尝试解决此问题。

编辑3:

Apple 通过我的开发者支持票回复了我。他们承认这是一个错误,并且(据我所知)似乎已在 iOS 9.2 beta 2 (7C46t) 中修复。

编辑4:

我更新了示例项目以说明此框架的另一个错误

0 投票
3 回答
18545 浏览

swift - 如何在 Swift 2 中符合 NSCopying 并实现 copyWithZone?

我想GKGameModel在 Swift 2 中实现一个简单的。Apple 的示例用 Objective-C 表示,并包含此方法声明(根据继承NSCopying自的协议的要求):GKGameModel

这如何转化为 Swift 2?以下在效率和忽略区域方面是否合适?

0 投票
2 回答
2151 浏览

swift - 使用 map() 对 Swift 字典进行“深拷贝”?

我有一个GKGameModel将其内部状态存储在 s 数组aCard的一个字典和一个从sb映射到s 数组的字典。GameplayKit 要求我必须将这个内部状态复制到.IntCardsetGameModel:

以下代码旨在仅复制数组并“深度复制”字典。FWIK 这应该就足够了,因为Cards 本身永远不会改变。

但是,这会在尝试“深拷贝”的行中导致以下语法错误:

无法将“[(Int, [Card])]”类型的值分配给“[Int, [Card]]”类型的值。

我究竟做错了什么?

0 投票
0 回答
113 浏览

ios - 实体-组件通信正确性

我正在按照实体组件风格的设计模式编写游戏,并且遇到了我能够解决的问题,但不确定这是否是最佳实践(或者是否存在这样的事情)。

我有一个处理游戏主要状态(菜单、关卡、暂停、背景)的状态机,以及一个处理更多零碎游戏状态的游戏组件中的内部状态机(新关卡、关卡、下一个水平,游戏结束和总结)。我想让外部状态机知道游戏已经从内部组件结束,但它没有引用主控制器类。通常,我会使用协议将信息委托给链上,但在我有限的 ECS 经验中,这似乎打破了范式。我正在做的是查询窗口的根视图控制器的应用程序委托,并根据内部状态调用便利方法......这将是一种可怕的 MVC 方式,但在 ECS 中似乎很好。

任何人都可以确认这并不像我想象的那么可怕,或者如果是的话,推荐一个新的范例?这将不胜感激。

基本上它是这样工作的(我认为整个发布的代码太多了):

MainMenuViewController 有一个 ApplicationEntity,它有一个包含状态机的 ApplicationLifecycleComponent。在按下“开始游戏”按钮时,状态机进入 ApplicationGameState。

ApplicationGameState 使用对 MainMenu VC(即 root)的弱引用来呈现加载 SpriteKit 场景的 GameViewController。游戏逻辑通过一堆最终报告“游戏结束”的内部组件和状态机发生在这里。

游戏结束时,ApplicationLifecycle 的状态机应该退出 ApplicationGameState 并进入 MainMenuState(或任何其他状态,必要时),但由于我无法从场景中获取根 VC,我向 AppDelegate 询问根 vc,将其转换作为 MainMenuViewController,获取其实体并告诉其生命周期组件更改状态,如下所示:

重新表述这个问题,我应该将根视图控制器的弱引用从应用程序启动到这个状态吗?是否有通知更高级别实体发生某事的最佳实践?

作为参考,这是我第一次涉足 ECS。

0 投票
3 回答
1239 浏览

ios - GameplayKit - 关于在组件之间发送消息的困惑

我正在使用 Spritekit 深入研究 GameplayKit,从我收集到的内容中,您可以继承GKEntity,然后开始添加GKComponents到该实体。实体或多或少只是一袋填充某些功能的组件。

我感到困惑的部分是组件之间的通信。你如何让它们解耦。例如,假设我有一个HealthComponent类,我将该组件添加到 aPlayerEntity和 anEnemyEntity中。我也有一个HealthBarComponent ,但我只想在玩家上方出现一个健康栏。当玩家受到伤害时,该信息需要在HealthBarComponent.

那么应该如何发送这些信息呢?GKComponentSystem我看到文档中有一个类。我不是 100% 应该如何使用它。

另一个问题是.. 当玩家的生命值归零时,他应该再生,而敌人应该保持死亡。当玩家的生命耗尽时,游戏结束。

敌人和玩家的健康系统大致相同,但每个人的死亡事件将完全不同。我没有关注如何在保持每个实体的独特行为的同时使用组件系统。

一些伪代码会很棒

0 投票
1 回答
818 浏览

xcode - GameplayKit:GKAgent 的微调控制

我正在使用 spritekit 测试 gamekit。我已经添加了一个GKAgent到我的GKEntity,我正在让我的实体通过创建一个endAgent接触位置来寻找我的接触。

这很好用。经纪人自然地移动并追逐我的触球。但是,我有两个问题..

当代理到达目的地时如何停止它。代理将永远绕圈,试图准确地落在该点上。我已经尝试过agent.behavior.removeAllGoals() ,我认为这会立即阻止代理,因为它没有目标..但没有任何反应。

第二个问题是如何微调运动。对于像导弹追逐飞机这样的事情来说,代理是理想的选择。问题是它在达到目标时会减速。运动模式是如此具体。我试过玩属性massmaxSpeed maxAcceleration。我缺少什么吗?

0 投票
1 回答
347 浏览

xcode - GKAgent 不动

我的项目中有一个 GKAgent,我试图通过让它遵循路径来移动它。路径已连同其相应的目标和行为一起创建,只要我从未设置它的位置,它就会移动。不幸的是,我不希望它从屏幕的角落开始,但如果我设置了位置,代理将不会对其跟随路径目标做出反应。有人对这个问题有任何见解吗?