SpriteKit:如何将触摸变成匀速矢量?

SpriteKit: how to turn touches into vectors of uniform speed?

我正在使用触摸来设置运动中的 SpriteKit 节点。目前我这样做:

 //(previous code turns current touch and last touch into thisP and thatP)...

 CGPoint velocity = CGPointMake(thisP.x - lastP.x, thisP.y - lastP.y);

//If the velocity is non-zero, apply it to the node:

if (!CGPointEqualToPoint(velocity, CGPointZero)) {
    [[MyNode physicsBody] applyForce:CGVectorMake(velocity.x, velocity.y)];
}

这非常有效地让节点根据用户滑动的速度移动不同的速度。哦,安娜,如果那是我想要的!

我实际想要的效果是每个节点都以均匀的速度移动,无论它们被滑动的速度有多快。看来我必须进行某种计算,从矢量中移除幅度但保留方向,这超出了我的范围。

这可能吗?

你走在正确的轨道上;您正在寻找的东西称为您已经计算的触摸移动矢量的 normalized vector。您可以通过计算起始向量的长度并将其每个分量除以该长度,然后将它们乘以您希望最终向量具有的长度(或在本例中为速度)来获得。在代码中:

float length = hypotf(velocity.x, velocity.y); // standard Euclidean distance: √(x^2 + y^2)
float multiplier = 100.0f / length; // 100 is the desired length
velocity.x *= multiplier;
velocity.y *= multiplier;