2

コンポーネントを持つGKEntityがありGKAgent2Dます。その動作はGKGoaltoWander:およびtoStayOnPath:maxPredictionTime:です。実体はシーン内を絶えずさまよいます。しかし、私はそれがしばらくさまようのを止めたいと思います. たとえば、エンティティがさまよっている羊の場合、定期的に食べるのをやめ、しばらくしてから再びさまよってほしいと思います。

アップデート:

エンティティ内:

addComponent(MoveIdleComponent(maxSpeed: 60, maxAcceleration: 6, radius: Float(node.texture!.size().width * 0.3), entityManager: entityManager))

MoveIdleComponent

class MoveIdleComponent : GKAgent2D, GKAgentDelegate {

let entityManager: EntityManager

init(maxSpeed: Float, maxAcceleration: Float, radius: Float, entityManager: EntityManager) {
    self.entityManager = entityManager
    super.init()
    delegate = self
    self.maxSpeed = maxSpeed
    self.maxAcceleration = maxAcceleration
    self.radius = radius
    print(self.mass)
    self.mass = 0.01
}


func agentWillUpdate(agent: GKAgent) {
    guard let spriteComponent = entity?.componentForClass(SpriteComponent.self) else {
        return
    }

    self.position = float2(spriteComponent.node.position)
}

func agentDidUpdate(agent: GKAgent) {
    guard let spriteComponent = entity?.componentForClass(SpriteComponent.self) else {
        return
    }

    spriteComponent.node.position = CGPoint(position)
}



override func updateWithDeltaTime(seconds: NSTimeInterval) {

    super.updateWithDeltaTime(seconds)

    behavior = WanderBehavoir(targetSpeed: maxSpeed)
}
}

WanderBehavoir:

class WanderBehavoir: GKBehavior {

  init(targetSpeed: Float) {
    super.init()

    if targetSpeed > 0 {
        setWeight(0.5, forGoal: GKGoal(toWander: targetSpeed))
    }
}
}

これどうやってするの?

前もって感謝します

4

2 に答える 2