【发布时间】: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];
【问题讨论】:
-
我认为您必须实现阈值速度的自定义实现,扩展您的 SKShapeNode 类添加您的属性并创建您的自定义实现。
-
最简单的解决方案可能是使用 didBeginContact: 方法在节点接触墙壁后为其分配额外的速度。
标签: ios objective-c sprite-kit