Итак, у меня есть эти движущиеся спрайты с физическими телами, которые я изначально ограничил одной областью. Допустим, назовите эту область Box1. Когда спрайты выходят за границы Box1, они возвращаются назад, и SKConstraint - это просто дополнительная мера, чтобы убедиться, что они остаются в пределах блока.
Я пытаюсь сделать кнопку, которая заставляет все спрайты в Box1 перемещаться по экрану во второй блок (Box2), который в основном идентичен Box1, но прямо рядом с ним. Box1 и Box2 разделяют граничную стену, поэтому экран по существу разделен на две части.
Моя проблема в том, что когда я вызываю функцию кнопки, спрайты застревают на стене и не могут пройти мимо нее в Box2. Я попытался установить как физические тела, так и SKConstraints узлов на ноль, поэтому я не знаю, что еще мешает им.
func moveSprites(){
if box1Sprites.isEmpty == false {
for sprite in box1Sprites{
sprite.constraints = nil
sprite.physicsBody = nil
let moveAction = SKAction.move(to: CGPoint(x: -300, y: 0), duration: 1) //This is a point within Box2
sprite.run(moveAction)
}
}
}
РЕДАКТИРОВАТЬ:
Я также сделал так, чтобы я мог перетаскивать спрайты из одного блока в другой, и код для этого почти такой же, и он отлично работает.
var currentMovingSprite: SKSpriteNode? = SKSpriteNode()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let pos = touch.location(in: self)
let node = self.atPoint(pos)
if node.name == "sprite"{
node.constraints = nil
node.physicsBody = nil
currentMovingSprite = node
}
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let pos = touch.location(in: self)
if let sprite = currentMovingSprite{
sprite.position = pos
}
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
spritePhysics(sprite: currentMovingSprite) // resets the sprite to how it was before
currentMovingSprite = nil
}