【发布时间】:2015-12-09 15:27:06
【问题描述】:
我正在开发一款带有动物角色的 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 以使其具有更“动画”的感觉)。
【问题讨论】:
-
显示实际改变比例的代码,你发布的只是精灵在屏幕上的位置,纹理不会随着提供的代码而改变
-
我用来将精灵从右转向左的代码如下。我已经使用函数 turnLeft() 进行了扩展。该节点是在 SKNode 的子节点中准备的,具有以下功能: override func turnLeft() { removeActionForKey("rightTurn") let turnRight2Left = SKAction.sequence([SKAction.scaleXTo(0.3, duration: 0.1), SKAction.scaleXTo(- 0.3, 持续时间: 0.1), SKAction.scaleXTo(-1.0, 持续时间: 0.1)]) runAction(turnRight2Left, withKey: "leftTurn") }
-
用格式将其发布在您的问题中
-
好的我想我明白你在这里做什么,你想让这个家伙缩小翻转然后扩大,这段代码工作正常,所以我需要看看右转,以及你如何实际调用这些函数
-
感谢 Dragon,很高兴知道代码应该可以工作。该项目太大而无法加载到问题中,但听起来我需要寻找其他对节点大小起作用的东西。当我完成更多挖掘工作时,我会回来。
标签: sprite-kit orientation agents gameplay-kit