我使用以下代码绘制线,它的工作原理非常棒,

http://www.merowing.info/2012/04/drawing-smooth-lines-with-cocos2d-ios-inspired-by-paper/

现在我要…..

1 GT;检测线是否与自身相交.
2)检测CCSprite是否在该闭合线内.

在搜索时遇到了LineIntersection的许多逻辑,但都没有准确.我给其中一个检测到一个十字路口,但是当没有相交线时也会检测到.

>第一种方法

- (BOOL) lineIntersectOccured:(CGPoint)t1 pointEnd:(CGPoint)t2
{
    BOOL result = NO;
    int pointsCount = [arrlinePoints count];

    CGPoint cp1;
    CGPoint cp2;

    for(int i = 0,j = 1; j < pointsCount; i++,j++)
    {
        [[arrlinePoints objectAtIndex:i] getValue:&cp1];
        [[arrlinePoints objectAtIndex:j] getValue:&cp2];

        // lines connected do not need to be included.
        if((cp2.x == t1.x && cp2.y == t1.y) || (cp1.x == t2.x && cp1.y == t2.y))
        {
            continue;
        }

        CGPoint diffLA = CGPointMake(cp2.x - cp1.x,cp2.y - cp1.y);
        CGPoint diffLB = CGPointMake(t2.x - t1.x,t2.y - t1.y);

        float compA = diffLA.x*cp1.y - diffLA.y * cp1.x;
        float compB = diffLB.x*t1.y - diffLB.y*t1.x;

        BOOL compA1 = (diffLA.x*t1.y - diffLA.y*t1.x) < compA;
        BOOL compA2 = (diffLA.x*t2.y - diffLA.y*t2.x) < compA;
        BOOL compB1 = (diffLB.x*cp1.y - diffLB.y*cp1.x) < compB;
        BOOL compB2 = (diffLB.x*cp2.y - diffLB.y*cp2.x) < compB;

        if(((!compA1 && compA2) || (compA1 && !compA2)) && ((!compB1 && compB2) || (compB1 && !compB2)))
        {
            result = YES;
        }
    }
    return result;
}

这就是我所说的这个方法,
我已经把我的分数存储在arrLinePoints中,从pangesture识别方法

if ([self lineIntersectOccured:[[arrlinePoints objectAtIndex:0] CGPointValue] pointEnd:[[arrlinePoints objectAtIndex:[arrlinePoints count] - 1] CGPointValue]] )
  {
      NSLog(@"Line Intersected");
  }

即使在以下情况下,这也使我成真

我也用不同的方法尝试了相同的功能,通过添加视图到CCDirector的视图

UIBezierPath intersect

但是这是提供性能问题,我的fps降低到近3到6.而且交叉路口的问题依然如此.

交点的完美情况是

请尽快帮忙!
感谢所有支持.

解决方法

当您自己构建路径时,不应该需要测试像素.而是使用用于创建路径的点.

找不到好的线段交集算法不算太难.这个问题似乎最好的答案有一个很好的方法:
Determining if two line segments intersect?

一旦你找到一个命中,使用确切的点和点的历史来构造一个多边形.

从那里你应该能够执行一个“多边形点”测试.

一些表现提示:

>在搜索交叉点时,只检查最新的线段与其他线段的冲突(以前没有相交的所有线条都不会相互交叉)>当您可以断定两点在线段的一个极端时,您可以跳过段,例如:current.a.x< current.b.x&&& (foreign.a.x< current.a.x&& foreign.b.x< current.a.x) 我希望这可以帮助你.

ios – 线条图线与自身的交点,也可以检测绘制线内的CCSprites的更多相关文章

  1. ios – 线条图线与自身的交点,也可以检测绘制线内的CCSprites

    一旦你找到一个命中,使用确切的点和点的历史来构造一个多边形.从那里你应该能够执行一个“多边形点”测试.一些表现提示:>在搜索交叉点时,只检查最新的线段与其他线段的冲突>当您可以断定两点在线段的一个极端时,您可以跳过段,例如:current.a.x

  2. php – MySQL选择3个随机行,其中三行的总和小于值

    我试图从表中选择三个随机行,其中组合的item_price列小于所需的量.想象一下,你有一个一美元金额.输入美元金额时,数据库会返回三个随机项,其中组合价格小于或等于您输入的金额.如果我输入300美元,你可以购买这三件商品,150美元,100美元和50美元.我在创建一个将返回符合此条件的三个项目的查询时遇到困难.我认为这会奏效,但我认为这只是一个巧合.它似乎只返回价格低于300美元,

  3. ios – SKPaymentTransaction:什么是transactionDate?

    )>在T2时间恢复购买(transactionDate是T2还是T1?)>originalTransaction恢复的事务,是其transactionDateT1还是T2?)是.transactionDate是T1.关注apple的文档:transactionDate:ThedatethetransactionwasaddedtotheAppStore’spaymentqueue.restoredpurchaseattimeT2(transactionDateisT2orT1?

  4. c# – 冗余通用约束?

    考虑以下通用方法:编译器将拒绝编译此代码;类型参数“T2”不能与“as”运算符一起使用,因为它不具有类类型约束或“类”约束好的,这很容易解决:但这不是多余的吗?考虑到T1已经存在的限制,是否有可能的T2不是类?

  5. c#-4.0 – Tuple和KeyValuePair之间的转换

    keyvaluePair之间是否存在内置转换或转换?我知道这将是一个简单的扩展方法:但是由于对象可以用于类似的目的,我想知道这样的转换器是否已经内置于框架?

  6. c# – 具有两个非相等(唯一)类型的泛型类

    是否可以实现一个约束为两个唯一通用参数的类?如果不是,那是因为它没有实现,还是因为语言结构(继承)是不可能的?>我:“然后用户可以使用map[t1]和map[t2]进行索引.如果它们是相同的类型,则没有任何区别,也没有任何意义.”>Dan:编译器实际上允许[两个泛型类型参数来定义不同的方法重载],所以我很好奇;它是否随意选择一种方法来调用?

  7. c# – 在响应式编程中循环之间的依赖关系

    考虑到反应式编程,我经常会遇到两个流相互依赖的情况.解决这些案件的惯用方法是什么?

  8. c# – 如何实现Tuple.Create(T1 item1,T2 item2)?

    我正在尝试实现类似于Tuple.Create的方法,但我仍然必须指定类型参数,而Tuple.Create则推断它们.我认为这个定义是正确的.我究竟做错了什么?

  9. c – 可以传递函数模板作为模板参数吗?

    我们来屁股,我们有一个模板功能:现在我们想用它作为另一个模板中的参数,例如像那样可能吗?

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部