SKPhysicsJointFixed in SpriteKit and Swift



我正在用精灵套件和Swift制作一个游戏,我在屏幕底部有一个精灵,从顶部掉落的精灵我想抓住并粘在底部的精灵上,所以我试图使用SKPhysicsJointFixed,但当物体碰撞时,掉落的物体不会粘在底部应该抓住并固定的精灵上,底部的精灵似乎适应了掉落精灵的物理特性,然后随之从屏幕上掉下来。这是我在didBeginContact方法中的代码。串是底部精灵的名字,它应该总是在底部,而不是消失。

    if contact.bodyA.node!.name == "Skewer"
    {
        let boundX = skewer.physicsBody?.node?.position.x
        let fixedJoint = SKPhysicsJointFixed.jointWithBodyA(contact.bodyA.node!.physicsBody, bodyB: contact.bodyB.node!.physicsBody, anchor: CGPoint(x: boundX!, y: boundY))
        physicsWorld.addJoint(fixedJoint)
        //            contact.bodyB.node!.removeFromParent()
    }
    else
    {
        contact.bodyA!.node!.removeFromParent()
    }

和底部屏幕的物理精灵在这里

func makeSkewer()
{
    skewer.name = "Skewer"
    skewer.position = CGPoint(x: size.width * 0.5, y: size.height * 0.244)
    skewer.physicsBody = SKPhysicsBody(rectangleOfSize: skewer.size)
    skewer.physicsBody?.affectedByGravity = false
    skewer.physicsBody?.categoryBitMask = kSkewerCategory
    skewer.physicsBody?.contactTestBitMask = kFoodCategory
    skewer.physicsBody?.collisionBitMask = kSceneEdgeCategory
    addChild(skewer)
}

下落的精灵的物理特性在这里

func random() ->CGFloat
{
    return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
}
func random(#min: CGFloat,max: CGFloat) -> CGFloat
{
    return random() * (max - min) + min
}
func addFood()
{
    let randomCatchIndex = Int(arc4random_uniform(UInt32(foods.count)))
    let food = SKSpriteNode(imageNamed: foods[randomCatchIndex])
    let actualX = random(min: food.size.width/2, max: size.width - food.size.width/2)
    let actualDuration = random(min: CGFloat(1.5), max: CGFloat(8.0))
    let actionMove = SKAction.moveTo(CGPoint(x: actualX, y: -food.size.height/2), duration: NSTimeInterval(actualDuration))
    let actionMoveDone = SKAction.removeFromParent()

    food.physicsBody = SKPhysicsBody(rectangleOfSize: food.size)
    food.position = CGPoint(x: actualX, y: size.height + food.size.height/2)
    food.physicsBody?.categoryBitMask = kFoodCategory
    food.physicsBody?.contactTestBitMask = kSkewerCategory
    food.physicsBody?.collisionBitMask = 0x0
    food.physicsBody?.dynamic = true
    food.runAction(SKAction.sequence([actionMove, actionMoveDone]))
    addChild(food)
}

将串状物设置为不具有动态物理特性。你目前所拥有的是它不受重力的影响,一旦它锁定在食物上(食物向下移动并有动量(,烤串就会随之移动。

在串肉串的创建中,运行以下行:

skewer.physicsBody?.dynamic = false

您现在也可以忽略affectedByGravity,因为它只影响动态对象。

相关内容

  • 没有找到相关文章

最新更新