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;
我正在使用触摸来设置运动中的 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;