- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
尝试学习如何使用 GameplayKit,尤其是代理和行为。尝试将所有教程和示例归结为一小段简单的代码,我可以将其用作我自己的应用程序的起点。不幸的是,我想出的东西不能正常工作,我也不知道为什么。它只是一个带有简单 GKGoal(toWander:) 的简单 Sprite 。它没有徘徊,而是永远向右直线移动。尽管我将最大速度和加速度设置为离谱的高值,但它的启动速度也慢得令人难以置信,加速速度也慢得令人难以置信。我无法弄清楚我的简单代码与所有复杂示例之间的根本区别。这是代码,减去 required init?(coder aDecoder: NSCoder)
:
class GremlinAgent: GKAgent2D {
override init() {
super.init()
maxAcceleration = 100000
maxSpeed = 1000000
radius = 20
}
override func update(deltaTime seconds: TimeInterval) {
super.update(deltaTime: seconds)
let goal = GKGoal(toWander: 100)
behavior = GKBehavior(goal: goal, weight: 1)
}
}
class Gremlin: GKEntity {
let sprite: SKShapeNode
init(scene: GameScene) {
sprite = SKShapeNode(circleOfRadius: 20)
sprite.fillColor = .blue
scene.addChild(sprite)
super.init()
let agent = GremlinAgent()
addComponent(agent)
let node = GKSKNodeComponent(node: sprite)
addComponent(node)
agent.delegate = node
}
}
在 GameScene.swift 中,didMove(to view:)
:
let gremlin = Gremlin(scene: self)
entities.append(gremlin)
谁能帮帮我?
最佳答案
正如已经指出的那样elsewhere ,您必须将目标的权重设置得非常高。尝试 100,甚至 1000,并注意行为上的差异。但即使有这些大权重,您的示例中仍然存在问题:maxSpeed
值。你不能把它设置得太高,否则你的 Sprite 会直线飞走。将其设置为更接近您在 GKGoal
对象中设置的速度的值。
另请注意,漫游将始终从 Sprite 指向的方向开始,因此如果您不希望它始终向右移动,请将 zRotation
设置为某个随机值.
最后,不要在每次调用 update()
时都创建新行为。对于漫游,您只需设置一次,例如,在 init()
中。
下面是一些有效的代码:
class GremlinAgent: GKAgent2D {
override init() {
super.init()
maxAcceleration = 100000
maxSpeed = 100
let goal = GKGoal(toWander: 100)
behavior = GKBehavior(goal: goal, weight: 1000)
}
}
class Gremlin: GKEntity {
let sprite: SKShapeNode
init(scene: GameScene) {
sprite = SKShapeNode(circleOfRadius: 20)
sprite.fillColor = .blue
sprite.zRotation = CGFloat(GKRandomDistribution(lowestValue: 0, highestValue: 360).nextInt())
scene.addChild(sprite)
super.init()
let agent = GremlinAgent()
addComponent(agent)
let node = GKSKNodeComponent(node: sprite)
addComponent(node)
agent.delegate = node
}
}
关于swift - GameplayKit GKGoal : can't get wandering to work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45625896/
我正在编写一个 Mac 应用程序,它接受文件作为输入,让用户进行元数据操作,然后将文件发送到 Python 脚本来处理输出。这在没有沙箱的情况下效果非常好。与所有事情一样,沙箱使其变得困难。 我嵌入到
我们正在学习我的人工智能游戏类(class)中的转向行为,我想我会尝试实现其中的一些行为。我主要是在阅读 The Nature of Code熟悉主题。 Here是我的 Unity 项目的存储库。相关
尝试学习如何使用 GameplayKit,尤其是代理和行为。尝试将所有教程和示例归结为一小段简单的代码,我可以将其用作我自己的应用程序的起点。不幸的是,我想出的东西不能正常工作,我也不知道为什么。它只
请原谅我对几何/数学术语不熟悉。图片将更好地描述我想要完成的事情: 我想取一个三 Angular 形(例如左边的那个)并从中生成一条路径(例如右边的那个)。每个三 Angular 形将伴随一个亮度值,
我是 ROS 新手。我试图让我的 turtlebot 向前移动,直到它与障碍物的距离在最小距离内,然后旋转直到路径畅通,然后再次向前移动等等... 我写了这段代码: import rospy, sys
我是一名优秀的程序员,十分优秀!