如何将SKSpriteNode移动到其约束之外的区域?

时间:2019-06-11 02:28:02

标签: ios swift xcode sprite-kit skspritenode

因此,我将这些移动的精灵与最初被限制在一个区域中的物理物体结合在一起。假设将此区域称为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
}    

0 个答案:

没有答案