SKSpriteKitNode的旋转与GKAgent2D的旋转不匹配

问题描述 投票:1回答:1

您好,我试图了解基本的游戏工具包。但是,将我的代理的旋转与应该作用于其的spritekitnode的旋转相匹配似乎会遇到麻烦。我正在使用iOS中新游戏模板随附的太空飞船。我试图在飞船上引起一种基本的漂移行为。太空飞船确实在徘徊,但几乎看起来像是太空飞船正在做这种奇怪的侧踏舞,因为它的旋转与特工的旋转不匹配。代码在下面。

class Entity : GKEntity {

let sprite: SKSpriteNode

override init() {
    let texture = SKTexture(imageNamed: "Spaceship")
    sprite = SKSpriteNode(texture: texture, color: UIColor.white, size: texture.size())
    sprite.position = CGPoint(x: 0, y: 0)
    sprite.zRotation = CGFloat(-.pi / 2.0)
    sprite.zPosition = 10
    sprite.setScale(1.0 / 8.0)
    super.init()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

}

class GameScene: SKScene , GKAgentDelegate {

var entities = [GKEntity]()
var graphs = [String : GKGraph]()
var anEntity = Entity()

private var lastUpdateTime : TimeInterval = 0

override func didMove(to view: SKView) {

    self.lastUpdateTime = 0

    let wanderGoal = GKGoal(toWander: 10)
    let behavior = GKBehavior(goal: wanderGoal, weight: 100)
    let agent = GKAgent2D()
    agent.radius = 40.0
    agent.position = vector_float2(Float(anEntity.sprite.position.x), Float(anEntity.sprite.position.y))
    agent.rotation = Float(-.pi / 2.0)
    print (agent.rotation)
    agent.delegate = self
    agent.maxSpeed = 100
    agent.maxAcceleration = 50
    agent.behavior = behavior
    anEntity.addComponent(agent)
    addChild(anEntity.sprite)
    entities.append(anEntity)

}




override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

}

override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {

}


override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered

    // Initialize _lastUpdateTime if it has not already been
    if (self.lastUpdateTime == 0) {
        self.lastUpdateTime = currentTime
    }

    // Calculate time since last update
    let dt = currentTime - self.lastUpdateTime

    // Update entities
    for entity in self.entities {
        entity.update(deltaTime: dt)
    }

    self.lastUpdateTime = currentTime
}

func agentWillUpdate(_ agent: GKAgent) {

}

func agentDidUpdate(_ agent: GKAgent) {

    guard let agent2d = agent as? GKAgent2D else {
        return
    }

    anEntity.sprite.position = CGPoint(x: CGFloat(agent2d.position.x), y: CGFloat(agent2d.position.y))
    //print (position)

    anEntity.sprite.zRotation = CGFloat(agent2d.rotation)
}
}
ios sprite-kit skspritenode sknode gameplay-kit
1个回答
0
投票

您可以将Sprite(png)的位图向右旋转90度。或者你可以写:

anEntity.sprite.zRotation = CGFloat(agent2d.rotation)-0.5 * CGFloat.pi

© www.soinside.com 2019 - 2024. All rights reserved.