向左或向右移动时如何水平翻转精灵?
How can I flip horizontally a sprite when moving left or right?
在我的 SpriteKit 项目中,我有一条船,我可以左右拖动它来接住从天上掉下来的物品,我希望船朝它移动的方向看,我想我必须从 CGFloat 更改 xScale( 1) 到 CGFloat(-1) 但我不知道怎么做,欢迎任何建议,这就是我处理船运动的方式:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
if let location = touch?.location(in: self){
node.run(SKAction.move(to: CGPoint(x: nodePosition.x + location.x - startTouch.x, y: nodePosition.y + location.y - startTouch.y), duration: 0.1))
}
}
在 touchesMoved
中,您可以使用 touch.location
和 touch.previousLocation
来确定 x 位置的变化。那么如果 delta x 是正数或负数,您可以相应地翻转 xScale。
//grab current and previous locations
let touchLoc = touch.location(in: self)
let prevTouchLoc = touch.previousLocation(in: self)
//get deltas and update node position
let deltaX = touchLoc.x - prevTouchLoc.x
let deltaY = touchLoc.y - prevTouchLoc.y
node.position.x += deltaX
node.position.y += deltaY
//set x flip based on delta
node.xScale = deltaX < 0 ? 1 : -1
在我的 SpriteKit 项目中,我有一条船,我可以左右拖动它来接住从天上掉下来的物品,我希望船朝它移动的方向看,我想我必须从 CGFloat 更改 xScale( 1) 到 CGFloat(-1) 但我不知道怎么做,欢迎任何建议,这就是我处理船运动的方式:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
if let location = touch?.location(in: self){
node.run(SKAction.move(to: CGPoint(x: nodePosition.x + location.x - startTouch.x, y: nodePosition.y + location.y - startTouch.y), duration: 0.1))
}
}
在 touchesMoved
中,您可以使用 touch.location
和 touch.previousLocation
来确定 x 位置的变化。那么如果 delta x 是正数或负数,您可以相应地翻转 xScale。
//grab current and previous locations
let touchLoc = touch.location(in: self)
let prevTouchLoc = touch.previousLocation(in: self)
//get deltas and update node position
let deltaX = touchLoc.x - prevTouchLoc.x
let deltaY = touchLoc.y - prevTouchLoc.y
node.position.x += deltaX
node.position.y += deltaY
//set x flip based on delta
node.xScale = deltaX < 0 ? 1 : -1