我试图让我的SKSpriteNodes永远保持恒定速度,即使在碰撞之后也是如此。我将重力设置为0,摩擦设置为0,线性和角度阻尼设置为零,但精灵仍然慢慢减速到零速度。我怎么能让他们继续前进?
根据下面的答案,这是我尝试过的: 编辑以下代码有效!我只需检查节点是否比限制更慢并加速它们。
[self enumerateChildNodesWithName:kBallName usingBlock:^(SKNode *node, BOOL *stop)
{
SKSpriteNode *ball = (SKSpriteNode *)node;
if (ball.physicsBody.velocity.dx < 0) {
if (ball.physicsBody.velocity.dx > -50)
ball.physicsBody.velocity = CGVectorMake(-50, ball.physicsBody.velocity.dy);
}
if (ball.physicsBody.velocity.dx > 0) {
if (ball.physicsBody.velocity.dx < 50)
ball.physicsBody.velocity = CGVectorMake(50, ball.physicsBody.velocity.dy);
}
if (ball.physicsBody.velocity.dy < 0) {
if (ball.physicsBody.velocity.dy > -50)
ball.physicsBody.velocity = CGVectorMake(ball.physicsBody.velocity.dx, -50);
}
if (ball.physicsBody.velocity.dy > 0) {
if (ball.physicsBody.velocity.dy > 50)
ball.physicsBody.velocity = CGVectorMake(ball.physicsBody.velocity.dx, 50);
}
}];
答案 0 :(得分:1)
如果将脉冲应用于节点的物理主体,则仅应用一次。想想踢球。另一方面,施加力就像连续推动,就像移动汽车的引擎一样。请记住,如果继续施加力,您的节点将变得越来越快,因此您必须在某个时刻指定速度限制。你可以这样做:
if(myNode.physicsBody.velocity.dx > 300)
myNode.physicsBody.velocity = CGVectorMake(300, myNode.physicsBody.velocity.dy);
这将限制你的行动权利&#34;速度达到300。
另一个选择是通过更改位置来手动移动节点。您可以使用myNode.position = CGPointMake(myNode.position.x+1, myNode.position.y);
之类的内容来完成此操作。每次运行代码时,这将使您的节点向右移动。
答案 1 :(得分:0)
将节点的恢复属性设置为1.0。恢复原状是在碰撞后保留节点能量的多少。
示例:
marble_node.physicsBody?.restitution = 1.0
默认恢复原状是0.2。将它改为1.0将使事情变得非常有弹性!