阻止 SKSpriteNode 减速
Posted
技术标签:
【中文标题】阻止 SKSpriteNode 减速【英文标题】:Stop SKSpriteNode from slowing down 【发布时间】:2015-03-10 19:33:44 【问题描述】:我试图让我的 SKSpriteNodes 永远以恒定的速度移动,即使在发生碰撞之后也是如此。我已将重力设置为 0,摩擦设置为 0,线性和角度阻尼设置为零,但 Sprite 仍会缓慢减速至零速度。我怎样才能让他们继续前进?
根据下面的答案,这是我尝试过的: 编辑下面的代码有效!我只需要检查节点的运行速度是否低于限制并加快速度。
[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);
];
【问题讨论】:
一开始你是如何让他们动起来的? 我只是在创建它们时施加了一种冲动。我应该发布什么代码?我认为它主要是通用的 Sprite 创建代码,但如果需要,我可以将其放入。 【参考方案1】:如果你对一个节点的物理体施加一个脉冲,它只会被应用一次。想想踢球。另一方面,施加力就像连续推动,就像发动机推动汽车一样。请记住,如果您继续施加力,您的节点将变得越来越快,因此您必须在某个时候分配速度限制。你可以这样做:
if(myNode.physicsBody.velocity.dx > 300)
myNode.physicsBody.velocity = CGVectorMake(300, myNode.physicsBody.velocity.dy);
这会将你的“向右移动”速度限制为 300。
另一种选择是通过更改节点的位置来手动移动节点。你可以使用myNode.position = CGPointMake(myNode.position.x+1, myNode.position.y);
之类的东西来做到这一点。每次运行代码时,这会将您的节点向右移动 1。
【讨论】:
谢谢!您会在更新(或类似)中应用速度限制吗?只列举我想继续移动的节点然后减慢它们的速度? @Siriss - 是的。您将在更新方法中完成所有这些操作。具体如何取决于您的代码及其结构。 @Siriss - 尝试在所有移动节点上将恢复属性设置为 1.0。 阅读文档后,applyForce 仅适用于一个游戏周期。我必须不断加快速度。 非常感谢,我想知道为什么我可以阻止我的球滚动,-forceApply 在渲染器(updateAtTime)函数中被调用,并且不断地施加力和移动球【参考方案2】:将节点的恢复属性设置为 1.0。恢复是碰撞后保留了多少节点的能量。
https://developer.apple.com/library/mac//documentation/SpriteKit/Reference/SKPhysicsBody_Ref/index.html#//apple_ref/occ/instp/SKPhysicsBody/restitution
例子:
marble_node.physicsBody?.restitution = 1.0
默认恢复为 0.2。将其更改为 1.0 将使事情变得非常有弹性!
【讨论】:
以上是关于阻止 SKSpriteNode 减速的主要内容,如果未能解决你的问题,请参考以下文章
Redux-Promise 不会阻止被拒绝的 Promise