您好,我试图了解基本的游戏工具包。但是,将我的代理的旋转与应该作用于其的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)
}
}
您可以将Sprite(png)的位图向右旋转90度。或者你可以写:
anEntity.sprite.zRotation = CGFloat(agent2d.rotation)-0.5 * CGFloat.pi