gpt4 book ai didi

swift - SpriteKit 和 Swift 中的 SKPhysicsJoint 已修复

转载 作者:行者123 更新时间:2023-11-30 14:08:03 24 4
gpt4 key购买 nike

我正在 Sprite Kit 和 Swift 中制作一个游戏,我在屏幕底部有一个 Sprite,并且有一个从顶部掉落的 Sprite,我想捕获并粘在底部的 Sprite 上,所以我正在尝试使用 SKPhysicsJointFixed 但当物体发生碰撞而不是下落的物体粘在底部的物体上(应该捕获并连接它时),看起来底部 Sprite 会适应下落 Sprite 的物理原理,然后从屏幕上掉下来用它。这是我的 didBeginContact 方法中的代码。 skewer 是底部 Sprite 的名称,应该一直在底部,不会消失。

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

底部屏幕 Sprite 的物理原理在这里

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

以及掉落 Sprite 的物理原理在这里

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,因为它只影响动态对象。

关于swift - SpriteKit 和 Swift 中的 SKPhysicsJoint 已修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32099168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com