【问题标题】:Crash on launch, error with SKphysics Joint启动时崩溃,SKphysics Joint 错误
【发布时间】:2016-07-18 22:07:53
【问题描述】:

我正在创建一个游戏,我正在尝试创建一个具有 2 个不同节点的角色,即腿和躯干。我尝试使用固定式关节将它们连接起来,但是当我这样做时,躯干有时会在四处移动时从腿上滑落。现在我正在尝试使用 2 个节点之间的距离限制来创建角色,希望它们现在不会彼此滑开,但是它在启动时不断崩溃有什么想法吗? 这是我的代码

func CreateHero (){

    soldierLegs.position = CGPoint(x: 405 , y: 139)
    soldierLegs.zPosition = 1
    soldierLegs.anchorPoint.x = 0.6
    soldierLegs.anchorPoint.y = 0.7

    let soldierLegsBody:SKPhysicsBody = SKPhysicsBody(rectangleOfSize: 
    soldierLegs.size)
    soldierLegsBody.dynamic = true
    soldierLegsBody.affectedByGravity = true
    soldierLegsBody.allowsRotation = false
    //body.restitution = 0.4
    soldierLegsBody.categoryBitMask = BodyType.soldierL.rawValue
    soldierLegsBody.contactTestBitMask = BodyType.enemy1.rawValue | 
    BodyType.enemy2.rawValue | BodyType.enemy3.rawValue  | 
    BodyType.desertForegroundCase.rawValue
    soldierLegs.physicsBody = soldierLegsBody

    soldierTorso.position = soldierLegs.position
    soldierTorso.zPosition = 2
    soldierTorso.anchorPoint.x = 0.25
    soldierTorso.anchorPoint.y = 0.1

    let soldierTorsoBody:SKPhysicsBody = SKPhysicsBody(rectangleOfSize: 
    soldierTorso.size)
    soldierTorsoBody.dynamic = true
    soldierTorsoBody.affectedByGravity = true
    soldierTorsoBody.allowsRotation = false
    soldierTorsoBody.categoryBitMask = BodyType.soldierT.rawValue
    soldierTorsoBody.contactTestBitMask = BodyType.enemy1.rawValue | 
    BodyType.enemy2.rawValue | BodyType.enemy3.rawValue  | 
    BodyType.desertForegroundCase.rawValue
    soldierTorso.physicsBody = soldierTorsoBody

    let Joint = 
    SKPhysicsJointLimit.jointWithBodyA(soldierLegs.physicsBody!, bodyB: 
    soldierTorso.physicsBody!, anchorA: soldierLegs.position, anchorB: 
    soldierTorso.position)

    Joint.maxLength = 0.01

    self.addChild(soldierTorso)
    self.addChild(soldierLegs)
    self.physicsWorld.addJoint(Joint)

}

【问题讨论】:

    标签: sprite-kit nodes game-physics skphysicsbody


    【解决方案1】:

    根据苹果official document

    创建一个限制关节

    class func joint(withBodyA: SKPhysicsBody, bodyB: SKPhysicsBody, anchorA: CGPoint, anchorB: CGPoint)
    

    创建一个新的限制关节。

    锚点A 场景坐标系中第一个物体上的连接点。

    锚B 场景坐标系中第二个物体上的连接点。

    在您的情况下,anchorA 等于 anchorB(同一点),没有限制,这会导致崩溃。

    【讨论】:

    • 如何创建联合限制?我认为设置joint.maxLength 值会设置距离限制。你如何建议我创建限制? @亚历山德罗
    • 不要给出相同的点,给出不同的点,并在 A 和 B 之间给出合理的距离,这样它们就不会相互重叠。你可以打开skView.showsPhysics,这样你就可以看到需要的距离了..
    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 2016-10-04
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2013-09-22
    相关资源
    最近更新 更多