【问题标题】:iOS8 + SpriteKit. Can SKPhysicsJointSpring Not Be Attached Between Overlapping Nodes?iOS8 + SpriteKit。 SKPhysicsJointSpring 可以不附加在重叠节点之间吗?
【发布时间】:2014-10-21 00:14:30
【问题描述】:

我有一个磁盘网格(带纹理的 SKSpriteNodes)排列在背景矩形(带纹理的 SKSpriteNode)上方的网格中:

我在背景矩形和每个磁盘之间附加了一个弹簧:

dotNode.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:scaleFactor * [dotNode radius]];

dotNode.physicsBody.categoryBitMask    = EIDotNodeCategory;
dotNode.physicsBody.collisionBitMask   = (EIDotNodeCategory | EISceneNodeCategory);
dotNode.physicsBody.contactTestBitMask = (EIDotNodeCategory | EISceneNodeCategory);

dotNode.physicsBody.dynamic = YES;

dotNode.physicsBody.density = 2.0;
dotNode.physicsBody.linearDamping = 0.01;
dotNode.physicsBody.restitution = 0.75;

SKNode *attachment = [dotNode.scene childNodeWithName:@"photoNode"];
SKPhysicsJointSpring *physicsJointSpring = [SKPhysicsJointSpring jointWithBodyA:attachment.physicsBody
                                                                          bodyB:dotNode.physicsBody
                                                                        anchorA:CGPointMake(dotNode.position.x, 8 + dotNode.position.y)
                                                                        anchorB:dotNode.position];

physicsJointSpring.damping = 0;
physicsJointSpring.frequency = 1;

[dotNode.scene.physicsWorld addJoint:physicsJointSpring];

这是背景的物理设置:

PhotoNode *photoNode = [PhotoNode photoNodeWithName:@"photoNode" texture:self.photoTexture shader:shader];
photoNode.zPosition = 2;
photoNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:photoNode.size];

photoNode.physicsBody.categoryBitMask    = EIPhotoNodeCategory;
photoNode.physicsBody.collisionBitMask   = EISceneNodeCategory;
photoNode.physicsBody.contactTestBitMask = EISceneNodeCategory;

photoNode.physicsBody.dynamic = YES;
photoNode.physicsBody.allowsRotation = NO;
photoNode.physicsBody.pinned = YES;

这里是场景的物理设置:

// get physical
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];

self.physicsBody.categoryBitMask    = EISceneNodeCategory;
self.physicsBody.collisionBitMask   = (EIDotNodeCategory | EIPhotoNodeCategory);
self.physicsBody.contactTestBitMask = (EIDotNodeCategory | EIPhotoNodeCategory);

当我运行应用程序时,我得到了这个:

没有弹簧行为。没有喜悦。我错过了什么?

【问题讨论】:

  • 0x141E 是的,节点连接在节点树中之后发生。

标签: ios8 sprite-kit


【解决方案1】:

启用物理调试绘图。你会看到你的矩形是动态的物体,随着圆圈移动。您应该将矩形设为静态(动态 = 否),最好将它们创建为边缘循环形状。

【讨论】:

  • 不解析您的回复。背景元素是唯一的矩形,它固定在场景节点上。你指的是什么矩形?你是说磁盘吗?请澄清。谢谢。
  • photoNode 是动态的。不确定pinned在这里是否有效,这取决于它的parent是否有physicsBody。无论哪种方式,在 SKView 上启用物理调试绘图,这样您就可以更好地了解实际情况。
  • 点是场景节点的子节点。 photoNode 是场景节点的子节点。所有节点都启用了physicsBodies。场景提供重力。固定 photoNode 并禁用它的旋转将其固定在空间中。我仍然不明白为什么这不应该起作用。此外,为什么 photoNode 不应该是物理的。假设我想让它旋转,或者用弹簧或其他东西连接到其他东西上。
  • photoNode 不需要是动态和固定的,您可以通过使用 edgeLoopF​​rom... 初始化程序将 photoNode 创建为静态节点来更有效地实现相同目的。这将使它成为一个不可移动的物理体,无论它被固定在哪里。
  • 是的,但是从模拟的角度来看,rect 没有效果。它从来没有想过我会这样说 iOS 框架,但 SpriteKit - 虽然对于渲染来说是轻而易举的 - 对于最基本的,微不足道的物理模拟来说看起来几乎无法使用。只是没用。叹息...
猜你喜欢
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
相关资源
最近更新 更多