gpt4 book ai didi

swift - 在屏幕上移动 SKSpriteNode

转载 作者:行者123 更新时间:2023-11-28 13:06:17 27 4
gpt4 key购买 nike

我想通过触摸在屏幕上移动一个 SKSpriteNode。我遇到的问题是,如果我锁定一个 Sprite ,然后我的手指将它拖到另一个 Sprite 上,第一个松开,我的手指开始拖动第二个。但是一旦我触摸了第一个 Sprite ,这就是我唯一想要移动的 Sprite 。必须有一个简单的方法来解决这个问题?

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
let touch: UITouch = touches.first as UITouch!
touchLocation = touch.locationInNode(self)
}

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch: UITouch = touches.first as UITouch!
let newTouchLocation = touch.locationInNode(self)
let targetNode = self.nodeAtPoint(touchLocation)
if targetNode.physicsBody!.categoryBitMask != PhysicsCategory.Ball {
targetNode.runAction(SKAction.moveBy(CGVector(point: newTouchLocation - touchLocation), duration: 0.0))
touchLocation = newTouchLocation
}
}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
//I don't do anything with this yet
}

最佳答案

发生这种情况是因为每次您的手指移动时您的 touchesMoved 函数都会运行,如果您的手指移动到一个新节点上,该节点将被分配给 targetNode。您可以通过更改此行来解决此问题:

let targetNode = self.nodeAtPoint(touchLocation)

对此:

let targetNode = self.nodeAtPoint(touch)

这样,第一次触摸时的节点将是跟随您手指的节点,而不是最后一次触摸时的节点。

关于swift - 在屏幕上移动 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32680593/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com