使用GameplayKit保持SKNodes直立

时间:2015-12-09 15:27:07

标签: sprite-kit orientation agents gameplay-kit

我正在使用动物角色制作SpriteKit游戏。动物使用来自GameplayKit的代理在屏幕上左右移动。他们遵循从屏幕的一侧到另一侧的无形代理。这个工作正常,但是当我从右向左移动时精灵正在颠倒(当他们从左向右移动时,他们正常)。我已经尝试更改xScale以获得镜像,但看起来代理正在覆盖SKAction,我已经做出改变这一点(角色在屏幕上瞬间跳动)。有谁知道如何让精灵字符保持直立?我的代码在func didBeginContact中触发。

if contact1 is RightWall {
   if contact2 is AnimalNode {
      invisibleNode.position = CGPointMake(0, CGFloat(10 + arc4random_uniform(UInt32(size.height - 20))))
      invisibleNode.agent.position = float2(x: Float(invisibleNode.position.x), y: Float(invisibleNode.position.y))
   contact2.turnLeft() // this triggers the xScale change I've tried directly on the SKNode
}

任何想法如何解决这个问题?

更新:代码显示在原始问题中。

移动节点是在SKNode(class:AnimalNode)的子节点中准备的,具有以下功能:

override func turnLeft() { 
removeActionForKey("rightTurn") let turnRight2Left = SKAction.sequence([SKAction.scaleXTo(0.3, duration: 0.1), SKAction.scaleXTo(-0.3, duration: 0.1), SKAction.scaleXTo(-1.0, duration: 0.1)]) runAction(turnRight2Left, withKey: "leftTurn") 
}

RightWall是GameScene中设置的SKShapeNode。联系人工作正常,因为我添加了一个print语句来检查if语句是否正常工作。对func turnLeft的调用也没有显示任何问题,节点中没有任何变化。也许这不是翻转角色的最佳方式。我对其他方法持开放态度。 turnLeft功能设置为当从右移动到左移时,使角色方向的变化看起来更加无缝(这就是为什么我分阶段改变精灵的xScale给出的这是一种更具动感的感觉。

1 个答案:

答案 0 :(得分:0)

谢谢你们的帮助。这需要一些挖掘,但我发现了另一个xScale的调用,我将其子类化。这超出了我的号召,引起了我注意到的跳跃动作。我可以结合父方法并解决问题。非常感谢您的提示和反馈。