Swift 碰撞后翻转SKSpriteNode纹理使其循环

Swift 碰撞后翻转SKSpriteNode纹理使其循环,swift,sprite-kit,Swift,Sprite Kit,我正在学一些雪碧。我正在尝试这样做:点击时将节点向右移动-->在右墙上碰撞翻转节点的纹理-->更改方向,如果在左墙上,则重复此操作 问题是,碰撞后,它将循环图像翻转。这是什么原因造成的 我正在移动触摸屏上的SKSPriteNode: moveAction = SKAction.moveBy(x: 100, y: 0, duration: 1) node.run(moveAction, withKey: "Right") node.physicsBody?.velocity = CGVect

我正在学一些雪碧。我正在尝试这样做:点击时将节点向右移动-->在右墙上碰撞翻转节点的纹理-->更改方向,如果在左墙上,则重复此操作

问题是,碰撞后,它将循环图像翻转。这是什么原因造成的

我正在移动触摸屏上的SKSPriteNode:

 moveAction = SKAction.moveBy(x: 100, y: 0, duration: 1)
 node.run(moveAction, withKey: "Right")
 node.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
 node.physicsBody?.applyImpulse(CGVector(dx: 40, dy: 130))
这是我检测碰撞的方式:

if (firstBody.categoryBitMask & PhysicsCatagory.node == PhysicsCatagory.node &&
            secondBody.categoryBitMask & PhysicsCatagory.RightWall == PhysicsCatagory.RightWall) {

            direction = "Left"
            rotate()
        }else if (firstBody.categoryBitMask & PhysicsCatagory.RightWall == PhysicsCatagory.RightWall &&
            secondBody.categoryBitMask & PhysicsCatagory.node == PhysicsCatagory.node) {

            direction = "Left"
            rotate()
        }
像这样,我翻转节点:

func rotate(){
        if direction == "Right"{
            node.xScale = node.xScale * -1
            updateScoreAndChangeBackgroundColor()
        }else{
            node.xScale = node.xScale * -1
            updateScoreAndChangeBackgroundColor()
        }
    }
我知道,只要方向没有改变,只要我点击它,它就会一直碰撞。但是如何以及应该如何将节点反弹回来以防止出现这种情况?

试试这个

func rotate(newDirection:String) {
    if newDirection != direction {
        node.xScale = node.xScale * -1
        updateScoreAndChangeBackgroundColor()
        direction = newDirection
    }
}
并呼叫轮换

rotate (newDirection: "Left")
还是这个

rotate (newDirection: "Right")

“它将循环图像翻转”是什么意思?@0x141E它会多次执行操作。例如,如果您在碰撞时添加分数,而不是添加一个,则会添加3。只要碰撞停止,它就会添加分数。并在碰撞停止时翻转图像。也许您可以通过
方向
(例如“左”)进入
rotate
方法,仅当参数和当前方向不相同时才翻转字符并增加分数,并在
rotate
方法中设置
direction
变量。@0x141E检查图像以了解我在说什么。我相信这是合乎逻辑的,所以我正在尝试你的解决方案。