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-代码猿的糟心事的主要内容,如果未能解决你的问题,请参考以下文章

开发环境eclipsemyEclipse本地tomcat调试发布maven项目遇到的糟心事

IOS开发-OC学习-常用功能代码片段整理

李洪强iOS开发之OC语言前期准备

iOS开发之Runtime机制深入解析

ios开发之OC基础-类和对象

高效 OC开发之系统框架