我正在使用触摸来设置运动中的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)];
}
这非常有效地使节点根据用户滑动的速度移动不同的速度。哦,安娜,如果那只是我想要的那样!
我实际想要的效果是每个节点以均匀的速度移动,无论它们刷得多快。似乎我必须进行某种计算,从矢量中去除幅度但保留方向,这超出了我的范围。
这可能吗?
答案 0 :(得分:3)
你走在正确的轨道上;你正在寻找的东西被称为你已经计算过的触摸运动矢量的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;