gpt4 book ai didi

ios - SpriteKit 场景中出乎意料的 physicsBody

转载 作者:可可西里 更新时间:2023-11-01 03:48:40 27 4
gpt4 key购买 nike

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

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

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

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

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

enter image description here

谁知道如何摆脱它?

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

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 语句中放置一个断点,你可以完全扫描这个物理体并获得所有关于它的信息,比如它的 node 属性设置为 nil 或者它的isDynamic 属性设置为 false。但是您可以更改它,就像在我的代码中一样,将例如 isDynamics 设置为 true。这使得它可以移动。因此,如果您对它施加一些力,它就会移动。

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

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

假设您有三个 SKSpriteNode 对象同时相交(假设 A 接触 B,A 同时接触 C)。 SpriteKit 一次只能处理一个联系人。并假设当 A 与 B 联系时,您正在从 parent 那里删除 A。然后,A 和 C 之间也有联系,因此 didBegin:(_ contact) 将被调用两次。如果您在第一个 didBegin(_ contact) 调用中从其父级移除 A,则在下一个 didBegin(_ contact) 调用中,bodyA.node 将为 nil(bodyA 是 Sprite A 的物理体),但它的物理体将保持可见,直到引擎完成所需的操作。这是因为节点树和物理世界是分开的。

关于ios - SpriteKit 场景中出乎意料的 physicsBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41446160/

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