因此,我将这些移动的精灵与最初被限制在一个区域中的物理物体结合在一起。假设将此区域称为Box1。当精灵碰撞Box1的边界时,它们会向后碰撞,SKConstraint只是确保它们保留在框内的另一种措施。
我想做的是创建一个按钮,使Box1中的所有子画面在屏幕上移动到与Box1基本相同但在其旁边的第二个Box(Box2)。 Box1和Box2共用一个边界墙,因此屏幕实际上分为两部分。
我的问题是当我调用按钮功能时,子画面卡在墙上,无法越过Box2。我尝试将节点的物理实体和SKConstraints都设置为nil,所以我不知道还有什么阻止它们。
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
}