gpt4 book ai didi

ios - SpriteKit 物理体在与关节连接时不会发生碰撞

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:07 25 4
gpt4 key购买 nike

我正在评估 iOS SpriteKit 物理引擎,为了进行测试,我使用 Xcode 创建了一个包含两个圆形节点的简单场景:

Two nodes in SpriteKit scene

两个节点都有圆形的物理体和 5 公斤的质量。我用 SKPhysicsJointSpring 连接两个节点。这是整个设置(在 viewDidLoad() 中):

let path = NSBundle.mainBundle().pathForResource("MyScene", ofType: "sks")!
let scene = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as! SKScene

let border = SKPhysicsBody(edgeLoopFromRect: scene.frame)
border.restitution = 0;
border.friction = 0;
scene.physicsBody = border

let player = scene.childNodeWithName("player")! // large ball
let tail1 = scene.childNodeWithName("tail1")! // smaller ball

player.physicsBody!.usesPreciseCollisionDetection = true
tail1.physicsBody!.usesPreciseCollisionDetection = true

let spring1 = SKPhysicsJointSpring.jointWithBodyA(player.physicsBody!, bodyB: tail1.physicsBody!, anchorA: player.position, anchorB: tail1.position)
spring1.damping = 1
spring1.frequency = 3
scene.physicsWorld.addJoint(spring1)

spriteKitView.presentScene(scene)

注意:重力在场景编辑器中设置为(0,0)。

当我移动较大的节点时(例如,通过使用 touchesBegan() 捕获触摸并将节点的位置设置为触摸位置),另一个节点会根据 spring 参数移动。

但是,如果我移动节点的速度足够快,从而使 Spring 力变得极端,当 Spring 收缩时,两个节点就会重叠。我希望它们相互碰撞,因为它们的 collisionBitMask 默认设置为 -1(所有位设置)。我启用了 usesPreciseCollisionDetection 但效果仍然可见。

当我在场景周围添加边缘循环时,它们会按预期与该边缘发生碰撞。与具有物理体(但没有连接关节)的其他节点相同。

我的印象是 Spring 的存在以某种方式使引擎忽略了与关节连接的节点之间的碰撞。其他人也观察到这一点吗?我忘了什么吗?或者这是否按预期工作?

最佳答案

试图回答我自己的问题。

我发现其他关节(例如 SKPhysicsJointLimit)也会禁用连接节点之间的碰撞。我唯一的结论是,所有 SpriteKit 关节都以某种方式将两个对象视为一个对象,认为碰撞是不可取的。虽然在我的应用程序中我更愿意启用碰撞。也许我应该在 Apple 开发者反馈中提交增强功能。

到目前为止,我的解决方法包括:

  1. 通过添加 SKFieldNode.springFieldSKFieldNode.dragField 作为 Sprite 节点的子节点来创建 Spring 行为。优点:作为 child ,这些字段会自动跟随其父位置;缺点:这花费了 2 个宝贵的 fieldBitMask 位,这自然限制了此类节点的数量。
  2. 在每一帧手动应用一些 Spring + 阻力。优点:不会浪费 fieldBitMask 的位,缺点:手动计算 Spring 力和阻力。

所以我倾向于支持选项 2。

总而言之:如果您希望在保持碰撞的同时在 2 个节点之间产生弹性行为,请手动实现力并且不要使用关节。

关于ios - SpriteKit 物理体在与关节连接时不会发生碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34373960/

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