问题标签 [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 - GameplayKit 的 nextIntWithUpperBound() 在操场上失败
以下代码在 iOS 项目中运行良好,但在 iOS 游乐场中失败。知道为什么,除了“这可能是一个错误”吗?注意:您需要打开 Playground 调试区域才能看到消息:“'subscript' 的重载存在这些部分匹配的参数列表:(Int)、(Range)、(Range)、(Self.Index)”
同样,相同的代码在常规 iOS 项目中也能正常工作。看起来有些东西对Int
and感到困惑UInt
,因为如果我进行类型转换randomIndex
,Int
它就可以正常工作。
swift - 程序在 GKAgent2D 位置和 SpriteKit 位置之间感到困惑
我正在使用 GameplayKit 和 Swift。在我的代理的移动组件中,我正在运行 agentWillUpdate:但在确定位置的行上出现错误“无法使用类型为 '(CGPoint)' 的参数列表调用类型为 'Float2' 的初始化程序”。
节点位置没问题(我已经用打印测试过)。当我通过 CMD 单击“位置”时,我被带到 SpriteKit 的位置属性,而不是 GKAgent2D 的属性。当我尝试使用 agent.property 引用属性时,调试器告诉我“'GKAgent' 类型的值没有成员'位置'。”
在下一个函数调用中,我得到与原始错误相同的错误,“无法使用类型为 '(vector_float2)' 的参数列表调用类型为 'CGPoint' 的初始化程序”
CMD 单击 CGPoint(position) 将我带到 GKAgent2D。似乎这两个“位置”是相互颠倒的。任何想法如何纠正这个问题?
ios - 初始化一组骰子 - 在 GKARC4RandomSource 上使用 dropValuesWithCount
我正在 swift 2.0 中初始化一组骰子。我已经声明了一个带有名称(:String),状态列表(:[String])和面(状态数组的索引)(:[Int])的类Die
根据GameplayKit Framework Reference和Erica Sadun 的这篇短文中的建议,我想删除 GKARC4RandomSource 的前 1024 个值以确保“真正的”随机性。
在我的 UIViewController 中,我设置了一个 init? 初始化我的骰子的函数
...
...
这甚至不会编译:最后一行返回错误:
我的代码在没有这一行的情况下工作,但我不确定我在这里做错了什么,除了上面引用的链接之外,我几乎找不到在网络上使用 Gameplay Kit 实现 Dice 的任何参考。
sprite-kit - 使用 GKAgents 左右移动精灵
我正在寻找一种GKAgent
在屏幕上从左到右移动 a 的方法。代理连接到 aGKEntity
并且我创建了另外两个代理,称为“leftWall”和“rightWall”。对于每个代理,都有一个匹配的具有唯一名称的精灵节点。我尝试SKPhysicsContact
在我的主程序GameScene
中使用将一个新的目标代理(例如,如果它与 leftNode 联系,则传递 rightNode 的名称)给在屏幕上移动的代理。
为了找到移动代理,我有一个类,其中包含一组实体。
}
从移动GKAgent
中,我查找对应的墙的代理targetWallEntityName
(这是一个字符串变量)并将其传递给“seek GKGoal
”。这基本上是可行的,除了当我设置多个代理时,传递一个新targetWallEntityName
的不仅会影响与左墙或右墙接触的代理,还会影响所有代理。结果是所有代理都在屏幕中振荡,响应最靠近两堵墙的代理的物理接触。任何想法如何解决这个问题?我应该先尝试将目标传递给实体,然后再将其发送给它的代理吗?
swift - 为什么我的 SCNAction 序列间歇性地停止工作?
我正在尝试SCNNode
在场景中移动一个,受限于GKGridGraph
. 沿着 PacMan 的思路思考,但在 3D 中。
我有一个ControlComponent
处理我的 SCNNode 的移动。逻辑应该是这样的......
- 设置
queuedDirection
属性。 - 如果
isMoving
标志为假,则调用 move() 方法 使用 GKGridGraph 评估下一步行动
direction
3.1 如果实体可以使用属性移动到GKGridGraphNode ,nextNode = nodeInDirection(direction)
queuedDirection
3.2 如果实体可以使用属性移动到GKGridGraphNodenextNode = nodeInDirection(queuedDirection)
3.3 如果实体不能移动到任一方向的节点,将
isMoving
标志设置为false并返回。- 创建
moveTo
动作 - 创建一个
runBlock
调用该move()
方法的 - 将
moveTo
和runBlock
动作作为一个序列应用到 SCNNode
我已经粘贴在下面的完整课程中。但我会先解释我遇到的问题。上述逻辑有效,但只是间歇性的。有时动画几乎立即停止工作,有时它会运行长达一分钟。但是在某些时候,由于某种原因,它只是停止工作 -setDirection()
将触发,move()
将触发,SCNNode 将在指定方向上移动一次空间,然后move()
停止调用该方法。
我不是 100% 相信我目前的方法是正确的,所以我很高兴听到是否有更惯用的 SceneKit/GameplayKit 方法来做到这一点。
这是完整的课程,但我认为重要的是setDirection()
andmove()
方法。
scenekit - 如何在 SceneKit 游戏中更新 GameplayKit 实体和组件
我有一个试图与 GameplayKit 集成的 SceneKit 游戏。
为了让 GameplayKit 工作,我需要通过调用它们的updateWithDeltaTime(seconds:)
方法来更新我的组件和实体。
在我见过的 SpriteKit/GameplayKit 示例中,这是使用 SKScene 的update
方法完成的,该方法在没有用户或开发人员输入的情况下连续触发。
似乎在 SceneKit 中,要实现类似的东西我需要调用SCNSceneRendererDelegate
方法renderer(renderer: updateAtTime time:)
。
然而,这只在场景中的某些东西正在运行时触发,例如 SCNAction。但是在我的游戏中,在用户滑动之前什么都没有运行。
是否有另一种推荐的 SceneKit 方法来连接某种在没有任何提示的情况下连续运行的运行循环?
swift - GKMinmaxStrategist 不返回任何动作
我的代码中有以下代码main.swift
:
...我的子类position
的一个实例在哪里。运行此代码后,是. 也会导致(但会导致对象)。GKGameModel
Position
move
nil
bestMoveForPlayer(position.activePlayer!)
nil
position.activePlayer!
Player
然而,
导致可能移动的非空数组。来自 Apple 的文档(关于bestMoveForPlayer(_:)
):
如果玩家无效、玩家不是游戏模型的一部分或玩家没有可用的有效动作,则返回 nil。
据我所知,情况并非如此,但函数仍然返回nil
. 这里会发生什么?
如果有任何帮助,这是我对GKGameModel
协议的实现:
如果我应该显示任何其他代码,请告诉我。
swift - 将 SKPhysicsContact 放在 GKComponent 中
目前,我使用 SKPhysicsContact 从 GameScene 中触发我的精灵的行为变化。问题是随着每次开发,游戏场景变得越来越长。有没有人设法制作一个嵌入了 SKPhysics 的 GKComponent 以简化联系人管理?这将如何工作?
swift2 - GKEntity 未被识别
我正在重新使用 DemoBots 中使用的方法进行接触检测。由于我的代码的工作方式和 DemoBots 的编写方式之间存在差异,我遇到了一个问题。在 DemoBots 中,组件 RenderComponent 有一个变量 ' node
'
在我的代码中,我没有使用动画,所以我的 RenderComponent 等价物有点复杂。变量“节点”已被使用并绑定到物理体,所以我创建了一个新变量“ entityNode
”
在 handleContact: 方法中,我尝试了两种解决方案来获取对实体的引用。选项1:
对此运行 print() 检查会返回这两个实体的 nil 值。这很合乎逻辑,因为我应该寻找一个名为 ' entityNode
' 的属性来查找实体。当我将其更改为选项 2 时:
我收到一个错误,即physicsBody 没有成员“ entityNode
。” 我已经尝试了很多其他的事情,比如查找与contactBody关联的实体,但是我得到另一个错误,它说后续代码正在寻找一个可选的。我已经尝试摆脱“如果”,但它只是将问题转移到下一个contactCallBack
电话。
有什么想法可以解决这个问题以使contactCallBack
电话正常工作吗?
ios - 引入障碍物时 GKObstacleGraph 找不到路径
我正在研究 Gameplaykit 寻路概念验证,我无法让 GKObstacleGraph 正确找到路径。
在下面的代码片段中(它应该在 Xcode 7.2 游乐场中工作),如果在创建图形时提供了障碍物,path2 始终是一个空数组。如果我使用空的障碍物数组创建 obGraph 对象,则 findPathFromNode 返回正确的路径。
创建的障碍物应该是一个简单的 U 形多边形,端点在 U 内。