SpriteKit 场景中出现意外的物理主体

2024-01-28

我正在使用 SpriteKit 实现一个质量弹簧系统(许多小型物理体与 SKPhysicsJointSpring 实例连接在一起)。一些粒子在穿过场景中心时会被卡住。

场景中央似乎有一个静止的小物体,我不知道它为什么在那里。

这是一个简单的方法来了解我在说什么:

  1. 在 XCode 8 中,使用“Game”模板创建一个全新的项目。
  2. In GameViewController.viewDidLoad(), add view.showsPhysics = true

如果运行该项目,您应该在中间看到一个小点,这是错误的主体:

有人知道如何摆脱它吗?

Edit:我尝试手动创建场景对象:

In GameViewController.viewDidLoad(),我替换了这个:

// Load the SKScene from 'GameScene.sks'
if let scene = SKScene(fileNamed: "GameScene") {
    view.presentScene(scene)
}

有了这个:

let scene = GameScene(size: view.frame.size)
scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
view.presentScene(scene)

但这并没有解决问题。


无论如何,我决定做出回答,因为我想分享很多信息,所以评论不合适。遗憾的是,我的回答并没有回答这个问题,但它提供了一些关于这个身份不明、显然能够飞行(物理身体)物体的有用信息:)

所以这是如何获取它的代码(并修改它???):

 //you can use self.frame here...I just copied Alessandro's code
 self.physicsWorld.enumerateBodies(in:(label?.frame)!) { body, stop in

    if let node = body.node {

        print("Type of this node: \(type(of:node))")    
        print("Frame of this node: \(node.frame))")

    }else{

       print("This body's node property is nil")

        body.affectedByGravity = true
        body.isDynamic = true

        body.applyImpulse(CGVector(dx: 0.003, dy: 0.0003))

    }
     print("Area covered by this node physicsBody: \(body.area)")
}

因此,如果您在 else 语句中放置一个断点,您可以完全扫描这个物理体并获取有关它的所有信息,就像它的节点属性设置为 nil或者说它的isDynamic属性设置为false。但你可以改变它,就像在我的代码中一样,设置例如isDynamics为真。这使得它可以移动。因此,如果你对其施加一些力,它就会移动。

尽管如此,就像我在评论中所说的那样,我不知道它为什么在那里,它代表什么或者它的目的是什么。

另外,对于那些想知道一个物理体怎么可能没有与之关联的节点的人(body.node equals nil)但在屏幕上仍然可见showsPhysics被设定为true,有一个合理的解释。物理世界与节点树分离。所以我们可以从节点树中删除一个精灵,但这并不意味着它的物理体会立即被删除。物理引擎可能还没有完成模拟……所以你可能想知道,这是怎么发生的?

假设你有三个SKSpriteNode对象同时相交(例如 A 接触 B 并且 A 同时接触 C)。SpriteKit一次只能处理一个联系人。假设当 A 与 B 接触时,您将 A 从父对象中移除。那么,A 和 C 之间也存在接触,所以didBegin:(_ contact)将被调用两次。如果你首先从它的父级中删除 AdidBegin(_ contact)打电话,在下一个didBegin(_ contact) call, bodyA.node将为零(bodyA是精灵 A 的物理体,但其物理体将保持可见,直到引擎完成所需的操作。这是因为节点树和物理世界是分开的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpriteKit 场景中出现意外的物理主体 的相关文章

随机推荐