ios开发之oc-代码猿的糟心事
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios开发之oc-代码猿的糟心事相关的知识,希望对你有一定的参考价值。
最近在游戏开发中,我遇到了一个很恼火的问题:思路都是对的,运行起来也没有问题,我是想根据两点之间的距离,让其中一个点有向另一个点移动的趋势(其实最开始我是想用万有引力定律来实现这种效果的,根据影响力的大小给他们设定个质量,但是我没有)。然而问题来了。。。。。
这是我最开始的代码,
//老鼠洞对老鼠的影响,距离越大,影响越小。 CGFloat HoleMouse=[self getTwoPointWithPointOne:_mouse.center WithPointTwo:_mousehole.center];//得到距离 CGFloat x=(5000*[self GetSignWithSumOne:_mousehole.center.x WithSumTwo:_mouse.center.x]/HoleMouse)+_mouse.SuDu.x; CGFloat y=(5000*[self GetSignWithSumOne:_mousehole.center.y WithSumTwo:_mouse.center.y]/HoleMouse)+_mouse.SuDu.y; _mouse.SuDu=CGPointMake(x,y);//设置老鼠速度
其中,[self GetSignWithSumOne:_mousehole.center.x WithSumTwo:_mouse.center.x]的作用就是得到两个参数相减得到的正负。内部实现是这样的:
-(CGFloat)GetSignWithSumOne:(CGFloat)sum1 WithSumTwo:(CGFloat)sum2 { return (sum1-sum2)/(abs((int)(sum1-sum2))); }
(abs((int)(sum1-sum2)))是得到(sum1-sum2)的绝对值,因为abs是对int值进行操作的,所以这里进行了类型强制转换。
其实这些都是最简单的毫无问题的,包括求两点之间的距离(至少在大家看来这些问题对于大学生来说是简单的),然而,问题就在这个简单的问题上了。
[self getTwoPointWithPointOne:pinger WithPointTwo:_mouse.center];这句话是为了求两点之间的距离:(很明显,重点来了)
最开始的实现
-(CGFloat)getTwoPointWithPointOne:(CGPoint) point1 WithPointTwo:(CGPoint) point2 { //第一个坐标 CLLocation *current=[[CLLocation alloc] initWithLatitude:point1.x longitude:point1.y]; //第二个坐标 CLLocation *before=[[CLLocation alloc] initWithLatitude:point2.x longitude:point2.y]; // 计算距离 CLLocationDistance meters=[current distanceFromLocation:before]; return meters; }
这个函数的原理是:将两个点转化为坐标,然后根据坐标来计算距离。逻辑上是没有问题的,实际上用起来也没多大的问题。
但是,当其中某一个点的横纵坐标其中一个是无限循环小数,这个函数就崩溃了。。算出来为0。(已经进行了事实证明,说到这里我想哭)。
于是,我就自己查了怎么求两点之间的距离(数学公式),没错,就是查的,因为我忘了(又想哭。。),查阅后自己写了一下这个函数
-(CGFloat)getTwoPointWithPointOne:(CGPoint) point1 WithPointTwo:(CGPoint) point2 { return sqrtf((point2.x-point1.x)*(point2.x-point1.x)+(point2.y-point1.y)*(point2.y-point1.y)); }
sqrt()是求平方根,返回的是float类型
简单高效的弄好了。。
其实说了这么多,我就想吐槽的是:求两点之间的距离的第一个方法是网上找的,用了一下可以我就没有多去管了,然后让我找bug找了接近一周的原因就是这么个简单的问题。如果最开始我就自己写就不会遇到这种鬼打墙的问题了,可是,我懒了,有了网络这种东西,我已近习惯性的在网络上去找解决方案,自己都没怎么想过,很明显的作茧自缚。
以此博文,提醒自己,学习时不要太依赖于网络,遇到问题自己多思考思考。
以上是关于ios开发之oc-代码猿的糟心事的主要内容,如果未能解决你的问题,请参考以下文章