Swift 球不';不要在Pong Clone中移动

Swift 球不';不要在Pong Clone中移动,swift,sprite-kit,swift3,Swift,Sprite Kit,Swift3,我的乒乓球版本有问题。 当我键入此代码时,球不会在屏幕上移动。 问题在哪里? 请帮帮我 class GameScene: SKScene { var ball = SKSpriteNode() var enemy = SKSpriteNode() var main = SKSpriteNode() override func didMove(to view: SKView) { ball = self.childNode(withName:

我的乒乓球版本有问题。 当我键入此代码时,球不会在屏幕上移动。 问题在哪里? 请帮帮我

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))

        let border  = SKPhysicsBody(edgeLoopFrom: self.frame)

        border.friction = 0
        border.restitution = 1

        self.physicsBody = border

    }
}

您知道这个代码行

ball.physicsBody?.applyImpulse(CGVector(dx: 20, dy: 20))
意味着

“如果ball的属性
physicsBody
不是
nil
,请调用其上的方法
applyImpulse()

你不是吗?可以如果
physicsBody
零,该代码将执行什么操作?对,完全没用。那么,您是否检查了执行此代码时,
physicsBody
不是
nil

根据财产
physicsBody
的文件:

默认值为nil,表示节点根本不参与物理模拟。如果提供了物理实体,则在模拟场景的物理时,物理实体将更新节点的位置并旋转节点


没有代码显示您在球对象上设置了
physicsBody

您使用过SpriteKit场景编辑器吗?@困惑我不明白您的问题。这与我的答案有什么关系?我很确定OP正在场景编辑器中制作所有内容,然后尝试“导入”它们并在上面的代码中使用它们。苹果和一些教程网站和服务鼓吹说,不需要太多的代码知识,就可以在SpriteKit中完成任务。所以这家伙可能是受害者,可能对光学和物理体的创建等一无所知。好吧,使用图形编辑器而不是代码仍然意味着你需要一个合理的设置。例如,如果我没有向Interface Builder中的按钮添加操作选择器,单击此按钮也没有效果,是吗?我不需要编写代码,但我需要在对象之间进行引用。因此,无论OP是否使用编辑器,我要检查的第一件事是,note确实有一个
physicsBody
,好像它没有,这已经解释了一切。当然,它可能有一个,然后我会重写我的答案。Mecki指出如果用户理解optionals的工作原理,并根据这个猜测写一个答案,这是绝对正确的。如果最初的海报以正确的方式使用了可选选项,那么也许这个问题甚至不需要问。塞巴斯蒂亚诺你是如何创建你的项目的,你从哪里获得灵感的?