【问题标题】:SKPhysicsBody with restitution 0 still bounces恢复原状为 0 的 SKPhysicsBody 仍然弹跳
【发布时间】:2014-06-19 19:58:20
【问题描述】:

我正在尝试以恒定速度和不反弹的方式放下 SKSpriteNode。

这是我正在使用的代码:

SKSpriteNode *floor = [SKSpriteNode spriteNodeWithColor:[UIColor clearColor] size:CGSizeMake(self.size.width, 1)];
floor.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:floor.size];
floor.physicsBody.restitution = 0.0f;
floor.physicsBody.dynamic = NO;
floor.physicsBody.allowsRotation = NO;

SKSpriteNode* block = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:imageName]];
block.position = CGPointMake(160, 300);
block.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(block.size.width - 2, block.size.height)];
block.physicsBody.dynamic = dynamic;
block.physicsBody.restitution = 0.0f;
block.physicsBody.allowsRotation = NO;

当我改变恢复值时,我可以看到块反弹的差异,但是当它为零时,它仍然会反弹一点。当多个块堆叠时,下面的块也会反弹一点。

我怎样才能完全禁用弹跳?

【问题讨论】:

  • 你试过负值吗?
  • @LearnCocos2D 我没有。您建议在哪里应用负值?
  • 当然归还。不知道那是做什么的。
  • 理论上。在物理引擎中,超出值范围可能会有所帮助。最坏的情况是它会立即崩溃,或者什么也不做。
  • SpriteKit 似乎与同样具有此行为的 Box2D 密切相关。这些库是为了速度而不是准确性而设计的。即使是静态物体,我也不会对获得 100% 的非弹性碰撞抱太大希望,更不用说试图防止堆叠的动态物体在从上方撞击时移动一点。如果这些情况是不可接受的,那么您可能使用了错误的工具来完成这项工作。我不知道 SpriteKit 是否可以让您减少时间步长,但对于 Box2D,我建议这样做(例如,使用 1/1000 秒的时间步长长度而不是典型的 1/60 秒等)。

标签: box2d sprite-kit skspritenode skphysicsbody restitution


【解决方案1】:

经过反复试验,我发现如果您想要准确定位元素,则不适合使用物理引擎。这就是为什么在我的棋盘游戏中,我重新实现了代码以进行 posit

【讨论】:

  • 你的解决方案到底是什么?我也有同样的问题。
  • @Damir179 起初,Physics Engine 看起来是我游戏的一个很好的解决方案。但正如我所提到的,它并不意味着准确定位。您无法使用物理引擎控制对象的精确位置。因此,就我而言,我开发了特定的游戏引擎,可以精确控制游戏对象及其确切位置。很难继续前进,但这是一个不错的设计选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2011-04-06
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多