使用 GameplayKit 保持 SKNodes 直立
Keeping SKNodes upright with GameplayKit
我正在开发一款带有动物角色的 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。联系人工作正常,因为我添加了打印语句以检查 if 语句是否正常工作。对 func turnLeft 的调用也没有显示任何问题,只是节点没有任何变化。也许这不是翻转角色的最佳方式。我对其他方法持开放态度。 turnLeft 函数的设置是为了让角色从右移到左移时方向的变化看起来更加无缝(这就是为什么我分阶段更改精灵的 xScale 以赋予它更多 'animated' 的感觉)。
谢谢你们的帮助。经过一些挖掘,但我发现了另一个对 xScale 的调用,我被子类化到。这压倒了我的决定并引起了我注意到的跳跃动作。我可以结合父方法并解决问题。非常感谢您的提示和反馈。
我正在开发一款带有动物角色的 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。联系人工作正常,因为我添加了打印语句以检查 if 语句是否正常工作。对 func turnLeft 的调用也没有显示任何问题,只是节点没有任何变化。也许这不是翻转角色的最佳方式。我对其他方法持开放态度。 turnLeft 函数的设置是为了让角色从右移到左移时方向的变化看起来更加无缝(这就是为什么我分阶段更改精灵的 xScale 以赋予它更多 'animated' 的感觉)。
谢谢你们的帮助。经过一些挖掘,但我发现了另一个对 xScale 的调用,我被子类化到。这压倒了我的决定并引起了我注意到的跳跃动作。我可以结合父方法并解决问题。非常感谢您的提示和反馈。