2节点精灵套件的异步移动
Asynchronous moving of 2 nodes sprite kit
我有 2 个节点,我想用 2 个手指在 iPad 上异步抓取。这是移动代码:
var ninjaMoving = false
var monsterMoving = false
var loc = CGPoint(x: 0.0, y: 0.0)
var prevLoc = CGPoint(x: 0.0, y: 0.0)
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in (touches as! Set<UITouch>) {
let location = touch.locationInNode(self)
if !self.nodesAtPoint(location).isEmpty && (self.nodeAtPoint(location).physicsBody?.categoryBitMask == 1 || self.nodeAtPoint(location).physicsBody?.categoryBitMask == 3) {
if self.nodeAtPoint(location).physicsBody?.categoryBitMask == 1 {
ninjaMoving = true
}
else if self.nodeAtPoint(location).physicsBody?.categoryBitMask == 3 {
monsterMoving = true
}
}
}
}
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in touches as! Set<UITouch> {
loc = touch.locationInNode(self)
prevLoc = touch.previousLocationInNode(self)
}
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in touches as! Set<UITouch> {
let location = touch.locationInNode(self)
if self.nodeAtPoint(prevLoc).physicsBody?.categoryBitMask == 1 {
ninjaMoving = false
}
if self.nodeAtPoint(prevLoc).physicsBody?.categoryBitMask == 3 {
monsterMoving = false
}
}
}
override func update(currentTime: CFTimeInterval) {
if ninjaMoving {
var x = playerNinja.position.x + (loc.x - prevLoc.x)
var y = playerNinja.position.y + (loc.y - prevLoc.y)
x = max(x, playerNinja.size.width / 2)
x = min(x, size.width / 2 - playerNinja.size.width)
y = max(y, playerNinja.size.height / 2)
y = min(y, size.height - playerNinja.size.height / 2)
playerNinja.position = CGPointMake(x, y)
}
if monsterMoving {
var x = playerMonster.position.x + (loc.x - prevLoc.x)
var y = playerMonster.position.y + (loc.y - prevLoc.y)
x = max(x, self.size.width / 2 + playerMonster.size.width)
x = min(x, size.width - playerMonster.size.width / 2)
y = max(y, playerMonster.size.height / 2)
y = min(y, size.height - playerMonster.size.height / 2)
playerMonster.position = CGPointMake(x, y)
}
}
但是我不能同时将一个精灵向左移动,另一个向右移动。在 sprite kit 中有什么方法可以做到这一点吗?
请检查此问题的答案:multitouch in spritekit
我们的想法是您应该分别跟踪各个触摸。
我有 2 个节点,我想用 2 个手指在 iPad 上异步抓取。这是移动代码:
var ninjaMoving = false
var monsterMoving = false
var loc = CGPoint(x: 0.0, y: 0.0)
var prevLoc = CGPoint(x: 0.0, y: 0.0)
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in (touches as! Set<UITouch>) {
let location = touch.locationInNode(self)
if !self.nodesAtPoint(location).isEmpty && (self.nodeAtPoint(location).physicsBody?.categoryBitMask == 1 || self.nodeAtPoint(location).physicsBody?.categoryBitMask == 3) {
if self.nodeAtPoint(location).physicsBody?.categoryBitMask == 1 {
ninjaMoving = true
}
else if self.nodeAtPoint(location).physicsBody?.categoryBitMask == 3 {
monsterMoving = true
}
}
}
}
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in touches as! Set<UITouch> {
loc = touch.locationInNode(self)
prevLoc = touch.previousLocationInNode(self)
}
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in touches as! Set<UITouch> {
let location = touch.locationInNode(self)
if self.nodeAtPoint(prevLoc).physicsBody?.categoryBitMask == 1 {
ninjaMoving = false
}
if self.nodeAtPoint(prevLoc).physicsBody?.categoryBitMask == 3 {
monsterMoving = false
}
}
}
override func update(currentTime: CFTimeInterval) {
if ninjaMoving {
var x = playerNinja.position.x + (loc.x - prevLoc.x)
var y = playerNinja.position.y + (loc.y - prevLoc.y)
x = max(x, playerNinja.size.width / 2)
x = min(x, size.width / 2 - playerNinja.size.width)
y = max(y, playerNinja.size.height / 2)
y = min(y, size.height - playerNinja.size.height / 2)
playerNinja.position = CGPointMake(x, y)
}
if monsterMoving {
var x = playerMonster.position.x + (loc.x - prevLoc.x)
var y = playerMonster.position.y + (loc.y - prevLoc.y)
x = max(x, self.size.width / 2 + playerMonster.size.width)
x = min(x, size.width - playerMonster.size.width / 2)
y = max(y, playerMonster.size.height / 2)
y = min(y, size.height - playerMonster.size.height / 2)
playerMonster.position = CGPointMake(x, y)
}
}
但是我不能同时将一个精灵向左移动,另一个向右移动。在 sprite kit 中有什么方法可以做到这一点吗?
请检查此问题的答案:multitouch in spritekit
我们的想法是您应该分别跟踪各个触摸。