阻止 SKSpriteNode 变慢
Stop SKSpriteNode from slowing down
我试图让我的 SKSpriteNodes 永远以恒定的速度移动,即使在碰撞之后也是如此。我已将重力设置为 0,摩擦力设置为 0,线性和 angular 阻尼设置为零,但 Sprites 仍然缓慢减速至零速度。我怎样才能让他们继续前进?
根据下面的答案,这是我尝试过的:
编辑下面的代码有效!我只需要检查节点是否比限制慢并加速它们。
[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);
}
}];
如果你对一个节点的物理体施加一个脉冲,它只会被应用一次。想想踢球。另一方面,施加力就像持续推动,就像发动机驱动汽车一样。请记住,如果您继续施加力,您的节点将变得越来越快,因此您必须在某个时候分配速度限制。你可以这样做:
if(myNode.physicsBody.velocity.dx > 300)
myNode.physicsBody.velocity = CGVectorMake(300, myNode.physicsBody.velocity.dy);
这会将您的 "moving right" 速度限制为 300。
另一种选择是通过更改节点的位置来手动移动节点。您可以使用 myNode.position = CGPointMake(myNode.position.x+1, myNode.position.y);
之类的东西来做到这一点。每当代码为 运行.
时,这会将您的节点向右移动 1
将节点的恢复 属性 设置为 1.0。恢复是碰撞后保留了多少节点能量。
示例:
marble_node.physicsBody?.restitution = 1.0
默认恢复为 0.2。将其更改为 1.0 将使事情变得非常有弹性!
我试图让我的 SKSpriteNodes 永远以恒定的速度移动,即使在碰撞之后也是如此。我已将重力设置为 0,摩擦力设置为 0,线性和 angular 阻尼设置为零,但 Sprites 仍然缓慢减速至零速度。我怎样才能让他们继续前进?
根据下面的答案,这是我尝试过的: 编辑下面的代码有效!我只需要检查节点是否比限制慢并加速它们。
[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);
}
}];
如果你对一个节点的物理体施加一个脉冲,它只会被应用一次。想想踢球。另一方面,施加力就像持续推动,就像发动机驱动汽车一样。请记住,如果您继续施加力,您的节点将变得越来越快,因此您必须在某个时候分配速度限制。你可以这样做:
if(myNode.physicsBody.velocity.dx > 300)
myNode.physicsBody.velocity = CGVectorMake(300, myNode.physicsBody.velocity.dy);
这会将您的 "moving right" 速度限制为 300。
另一种选择是通过更改节点的位置来手动移动节点。您可以使用 myNode.position = CGPointMake(myNode.position.x+1, myNode.position.y);
之类的东西来做到这一点。每当代码为 运行.
将节点的恢复 属性 设置为 1.0。恢复是碰撞后保留了多少节点能量。
示例:
marble_node.physicsBody?.restitution = 1.0
默认恢复为 0.2。将其更改为 1.0 将使事情变得非常有弹性!