我正在开发一款带有动物角色的 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(类: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 以赋予它更“动画”的感觉)。