Fit*_*tzy 2 iphone math positioning objective-c
我要问的问题可能有些挑战.我将努力使这一点尽可能清晰和有凝聚力.
我正在制作一个游戏,其中有一个"激光环",如下所示:

当提示时,这个激光环将发射一个"抓钩",这只是下图所示的图像.frame.width调整此图像的属性以使其触发(延长)和缩回(缩短).它从宽度0开始,随着帧的进展,它会延长直到达到所需的点.

这种抓钩在发射时,应与戒指对齐,使它们看起来像是一个物品.为清晰起见,请参阅下图:

*请注意,抓钩的宽度几乎每帧都会改变,因此不能假设一个恒定的宽度.
需要注意的是,由于难以解释的原因,我只能访问frame.center抓钩的frame.origin属性而不是属性.
所以,我给你所有的问题是:我如何,只访问frame.center.x与frame.center.y该抓钩的特性,将其放置在激光周围环以这样一种方式,它似乎从环无缝地扩展如图所示在上面的图片 - 大概根据任何给定框架上的抓钩的角度和宽度计算?
任何帮助都非常感谢.
好的,我在自己的应用程序中完成了同样的事情.
我做的更容易的技巧是有一个函数来计算线的"unitVector".
即矢量基于线长度1变化.
它只使用简单的pythagorus ...
- (CGSize)unitVectorFromPoint:(CGPoint)start toPoint:(CGPoint)end
{
//distance between start an end
float dX = end.x - start.x;
float dY = end.y - start.y;
float distance = sqrtf(dX * dX + dY * dY); // simple pythagorus
//unit vector is just the difference divided by the distance
CGSize unitVector = CGSizeMake(dX/distance, dY/distance);
return unitVector;
}
Run Code Online (Sandbox Code Playgroud)
注意......在开始和结束的哪个方向并不重要,因为数字只会给出正值.
现在,您可以使用此向量到达两点之间的任意点(圆心和目标的中心).
所以,这条线的起点是......
CGPoint center = // center of circle
CGPoint target = // target
float radius = //radius of circle
float dX = center.x - target.x;
float dY = center.y - target.y;
float distance = sqrtf(dX * dX + dY * dY);
CGSize unitVector = [self unitVectorFromPoint:center toPoint:target];
CGPoint startOfLaser = CGPointMake(center.x + unitVector.x * radius, center.y + unitVector.y * radius).
CGPoint midPointOfLaser = CGPointMake(center.x + unitVecotr.x * distance * 0.5, center.y + unitVector.y * distance * 0.5);
Run Code Online (Sandbox Code Playgroud)
这只是将单位矢量乘以你想要的距离(半径)到达该距离线上的点.
希望这会有所帮助:D
如果你想要两点之间的中点,那么你只需要将"半径"改为你想要计算的距离,它就会给你中点.(等等).
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |