将x位置设置为SKSpriteNode

时间:2016-12-21 09:14:49

标签: ios swift skspritenode

嗨,我开发了一个简单的砖块游戏。游戏看起来像这样。

enter image description here

在此图像的底部,您可以看到一个球拍(黄色条)。在touchesBegan上,我想获得触摸的x位置并将球拍移动到该x位置。

我试过但是收到了错误。

  

2016-12-21 14:35:50.540 BrickOut [1347:38411] SKUtil.m:MGGetBoolAnswer   在模拟器中不可用。

     

X地点:(95.0,670.33332824707)

     

致命错误:在展开Optional值(lldb)时意外发现nil

Swift Code

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    var ball:SKSpriteNode!
    var paddle:SKSpriteNode!

    override func didMove(to view: SKView) {
        ball = self.childNode(withName: "Ball") as! SKSpriteNode!
        paddle = self.childNode(withName: "Paddle") as! SKSpriteNode!


        ball.physicsBody?.applyImpulse(CGVector(dx: 50, dy: 50))
        let border = SKPhysicsBody(edgeLoopFrom: (view.scene?.frame)!)
        border.friction = 0
        self.physicsBody=border

    }



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

        for touch in touches{
            let touchLocation = touch.location(in: self.view)
            print("X Location : ", touchLocation)
            paddle.position.x = touchLocation.x

        }
    }

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

            let touchLocation = touch.location(in: self.view)
            print("X Location moved: ", touchLocation)
            paddle.position.x = touchLocation.x

        }
    }

}

有人可以帮我解决这个问题。我想将挡板x位置更改为触摸的x位置。

1 个答案:

答案 0 :(得分:0)

首先你可以忽略这个

  

2016-12-21 14:35:50.540 BrickOut [1347:38411] SKUtil.m:MGGetBoolAnswer在模拟器中不可用。

接下来,在这些行中

ball = self.childNode(withName: "Ball") as! SKSpriteNode!
paddle = self.childNode(withName: "Paddle") as! SKSpriteNode!

你应该转为SKSpriteNode而不是SKSpriteNode!

现在再次运行......你刚刚在场景加载时发生了撞击?

这意味着在您的sks中,您没有放置名为SKSpriteNode的{​​{1}}和/或名为Ball的其他SKSpriteNode