【问题标题】:velocity threshold for elastic collision弹性碰撞的速度阈值
【发布时间】:2016-02-03 14:45:34
【问题描述】:

当我在玩 spritekit 时,我注意到即使恢复设置为 1.0(线性阻尼和摩擦均为 0),如果节点的速度很小,它也不会反弹。例如。在下面的代码中,我在左侧创建了一条边,并让一个球击中了边。我注意到在x方向,只要速度大于150,球就会反弹;否则它只会粘在墙上并停止移动。 所以我想知道,有没有办法改变这个阈值,让球即使在低速时也能反弹?谢谢!

self.physicsWorld.gravity = CGVectorMake(0, 0);
SKNode *leftEdge = [[SKNode alloc] init];
leftEdge.physicsBody = [SKPhysicsBody bodyWithEdgeFromPoint:CGPointZero toPoint:CGPointMake(0.0, self.size.height)];
leftEdge.position = CGPointZero;
[self addChild:leftEdge];

SKShapeNode *ball = [SKShapeNode shapeNodeWithCircleOfRadius:30];
ball.position = CGPointMake(self.size.width * 0.3, self.size.height * 0.5);
ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:30];
ball.physicsBody.velocity = CGVectorMake(-150, 0.0);//not bounce
ball.physicsBody.restitution = 1.0;
ball.physicsBody.friction = 0.0;
ball.physicsBody.linearDamping = 0.0;
[self addChild:ball];

【问题讨论】:

标签: ios objective-c sprite-kit


【解决方案1】:

当两个物体发生碰撞时,它们的恢复和摩擦(以及许多其他)属性都会被考虑在内。因此,对于弹性碰撞,将壁恢复为 1,摩擦力为 0。

【讨论】:

  • 尝试关闭重力,看看是否是导致它的原因。
猜你喜欢
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多