Sprite Kit-有时球从屏幕上消失了吗?

iam*_*rak 5 sprite-kit swift

在此处输入图片说明

我是Sprite Kit的新手。我尝试了2个球员进行简单的弹跳游戏,另一个是缓慢跟踪球。但是我发现了一个问题。当我将线移到带边缘的球上时,球从屏幕上消失了。还有一次没问题,球跳动。问题是什么?

我有一个GameScene,sks和ViewController。我的精灵节点来自sks。如果有人解释这种情况。会更好。我已附上我在下面所做的工作。

我的GameScene:

class GameScene: SKScene {

var ball = SKSpriteNode()
var enemy = SKSpriteNode()
var main = SKSpriteNode()

override func didMove(to view: SKView) {

    ball = self.childNode(withName: "ball") as! SKSpriteNode
    enemy = self.childNode(withName: "enemy") as! SKSpriteNode
    main = self.childNode(withName: "main") as! SKSpriteNode

    ball.physicsBody?.applyImpulse(CGVector(dx: -20, dy: -20))
    ball.physicsBody?.linearDamping = 0
    ball.physicsBody?.angularDamping = 0

    let border = SKPhysicsBody(edgeLoopFrom: self.frame)
    border.friction = 0
    border.restitution = 1

    self.physicsBody = border

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    for touch in touches {

        let location = touch.location(in: self)
        main.run(SKAction.moveTo(x: location.x, duration: 0.2))
    }
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

    for touch in touches {

        let location = touch.location(in: self)
        main.run(SKAction.moveTo(x: location.x, duration: 0.2))
    }

}

override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered

    enemy.run(SKAction.moveTo(x: ball.position.x, duration: 0.5))
}
Run Code Online (Sandbox Code Playgroud)

视图控制器:

class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    if let view = self.view as! SKView? {
        // Load the SKScene from 'GameScene.sks'
        if let scene = SKScene(fileNamed: "GameScene") {
            // Set the scale mode to scale to fit the window
            scene.scaleMode = .aspectFill

            // Present the scene
            view.presentScene(scene)
        }

        view.ignoresSiblingOrder = true


    }
}

override var prefersStatusBarHidden: Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)

打击垫设置:

垫

球设置:

球

一些更新

我在更新功能中尝试了一些消息,然后遇到同样的情况,球从设备的左侧移出(使用iPhone 6S)

在此处输入图片说明

在此处输入图片说明

2016-12-08 14:27:54.436485 Pong [14261:3102941]致命错误:球超出左边界:文件

在此处输入图片说明

Ste*_*ves 2

重现问题有多容易?在 中update(),打印球的位置以查看它“消失”时的位置。(这将产生大量输出,因此请注意)。

从您发布的内容来看,球似乎没有设置为与边界碰撞,这意味着球不会对边界做出反应(即反弹),并且边界本身是不动的(因为它是基于边缘的物理身体)。这与高球速(来自重击)相结合可能会使您用“主”精灵击球太用力以至于它穿过边界 - 使用preciseCollisionDetection=true可能会解决这个问题,但首先给边界一个类别并将其添加到球的collisionBitMask.