【问题标题】:Swift SpriteKit Create a border where only three sides are passableSwift SpriteKit 创建一个只有三个边可以通过的边框
【发布时间】:2017-03-28 02:11:29
【问题描述】:

我正在尝试创建一个用户通过投篮来玩的游戏。我希望球从顶部边界和侧边界反弹。球最初放置在底部边界,当用户触摸一个点时,球会朝那个方向移动并从边界反弹。但是,我希望球在再次触及底部边界时停止,而不是从它弹起。我已经做到了让球从所有边界反弹,但我希望它只从顶部和侧面反弹。如果此代码不足以做出正确响应,我深表歉意;我在这个论坛上比较新:)

     let border = SKPhysicsBody(edgeLoopFrom: self.frame)
    //create variable representing frame of gamescene

    border.friction = 0
    border.restitution = 1
    self.physicsBody = border

这是碰撞检测的代码。 func didBegin(_contact: SKPhysicsContact) {

    if (contact.bodyA.categoryBitMask == BodyType.ball.rawValue && contact.bodyB.categoryBitMask == BodyType.BottomBorder.rawValue){
        SmallBall.isPaused = true
        }
    else if(contact.bodyB.categoryBitMask == BodyType.ball.rawValue && contact.bodyA.categoryBitMask == BodyType.BottomBorder.rawValue)
    {
        SmallBall.isPaused = true
    }
}
}

【问题讨论】:

    标签: swift sprite-kit frame bounds


    【解决方案1】:

    我只会在比场景(白色框)框架稍长的矩形(黄绿色轮廓框)上创建 edgeLoop,这样它就挂在场景下方。使其具有与您当前拥有的所有相同的属性。然后我会在场景下方创建另一个物理体(红色框)。然后在didBegin(_ contact: SKPhysicsContact)方法中检测到小球和红框的碰撞并停止

    【讨论】:

    • 感谢您的回复!停止球运动的命令是什么?我见过 isPaused = true 和 RemoveAllActions() 但它们都没有阻止球。
    • 请检查我的代码。我在原始评论上对其进行了编辑。
    • 假设您正在使用物理脉冲来移动对象,请将速度设置为 0,0,例如 SmallBall.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多