Swift 碰撞后翻转SKSpriteNode纹理使其循环
我正在学一些雪碧。我正在尝试这样做:点击时将节点向右移动-->在右墙上碰撞翻转节点的纹理-->更改方向,如果在左墙上,则重复此操作 问题是,碰撞后,它将循环图像翻转。这是什么原因造成的 我正在移动触摸屏上的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
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检查图像以了解我在说什么。我相信这是合乎逻辑的,所以我正在尝试你的解决方案。