Cocos2d iPhone非矩形精灵触摸检测

2023-12-24

有一个在精灵中包含三角形图形的项目。我将这些精灵排列在网格中,以便它们的矩形全部重叠。当精灵被触摸时,它们的 z 顺序(由我)被更改,以将它们放在 zOrder 的顶部。

我使用的是 Cocos 0.8.1 和触摸调度程序方法。我可以进行触摸操作,但显然与其他精灵重叠的“隐藏”精灵无法被触摸。

问题是“Is the touch in my rect”方法是基于精灵的矩形,但图像是三角形,我想问是否有人知道一个Cocos友好的方法来测试图像本身是否正在被击中。

我似乎记得这是当时流行的命中测试方法,但我找不到任何关于如何在 Cocos/iPhone Land 中完成它的参考。

目标是仅在触摸图像像素时响应触摸,而不仅仅是包含精灵的矩形。


当然,您可以根据您想要的任何形状进行测试,而不是针对盒子进行测试。

我最初发布过你可以使用 NSBezierPath,但显然这在 iPhone 套件上不可用,只能在 Mac 上使用。相反,在 iPhone 上您可以使用 CGPath。

使用以下命令创建新路径CGPathCreateMutable()它返回一个const CGPath *(也称为CHPathRef
然后使用CGPathAddRect or CGPathAddLines创造我们的道路。
CGPathContainsPoint将测试您的点是否在形状中。

或者,您可以创建一个客户函数(因为您使用三角形)仅执行简单的计算来检查您的点是否在三角形内部。一些数学知识应该可以解决问题(尽管当你旋转形状时,它会稍微复杂一些。我稍微写了一下,因为你可以相对于形状的原点旋转触摸点并进行点击检测)

对于三角形:

   C
  /\
 /__\
A    B
point of touch is P

使用以下算法,您应该能够找到触摸:

/* first test against a box, for performance */
if( P.y > C.y || P.y < A.y || P.x < A.x || P.X > B.x )
    return false; // false if P falls outside "the box"

/* then check if its within the shape */
/* split the triangle into 2 parts, around the axle of point C */
if( P.x < C.x ) // if the x value of point P is on the left of point C
    if( P.y > ((C.y -A.y) / (C.x - A.x)) * P.x )
        return false; // the point is above the triangle's side AC
else // if the x value of point P is greater than or equal to point C
    if( P.y > C.y - ((C.y - B.y) / ( B.x - C.x )) * ( P.x - C.x ) )
        return false; // the point is above the triangle's side BC

return true; // the point must be in the triangle, so return true.

上面是干编码,但应该是正确的。

以上仅适用于我绘制的形状中的三角形(其中 C.x 位于 A.x 和 B.x 之间,A 和 B 高度相同,但低于 C)。当然,您可以修改它以针对任何形状进行测试,但是,您必须权衡仅使用可用的CGPath.

如果你不明白,或者有问题,请告诉我!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cocos2d iPhone非矩形精灵触摸检测 的相关文章

  • 如何更改 UIActivityIndi​​catorView 以设置自定义图像?

    好吧 我正在寻找一种方法来更改我的微调器图像并使用自定义图像 有什么建议吗 我创建了一个UIActivityIndi catorView 的子类 https github com cncool CDActivityIndicatorView
  • 在 iPhone 的日期选择器中插入空白值

    我有一个日期选择器 使用操作表显示 我想在日期选择器中插入一个空白值并将其设置为默认值 它应该仅根据用户选择而改变 这可能吗 如果是的话怎么办 感谢所有宝贵的建议 UIDatePicker 仅支持某些模式 并且不允许这种自定义 将空白或自定
  • 文件是为存档而构建的,这不是正在链接的体系结构(i386)

    我必须构建静态库 我想在我的 iPhone 和 iPad 应用程序中使用 当我尝试运行模拟器时 出现链接错误 我是 iOS 开发新手 请帮忙 ld 警告 忽略文件 Users valuelabs Desktop DruvaProject l
  • 签名仅对临时无效

    我不确定我的临时项目发生了什么变化 但在尝试安装时出现此错误 应用程序未通过协同设计验证 签名无效 或者不是用Apple提交证书签名的 19011 设备调试构建良好 与我的临时配置文件关联的证书直到 2011 年才会过期 我搜索了 Goog
  • UICollectionViewFlowLayout IOS的​​minimumLineSpacing属性

    对于UICollectionViewFlowLayout的属性minimumLineSpacing 苹果的文档说 对于垂直滚动网格 该值表示最小值 连续行之间的间距 对于水平滚动的网格 该值表示连续列之间的最小间距 我测试它和代码的一部分是
  • 在我的 iPhone 应用程序中使用视频作为启动画面是个好主意吗?

    我即将完成一个应用程序 现在我想在应用程序完成加载和启动后添加带有我公司徽标的动画启动屏幕 我可以为此使用 openGL 动画 但我想知道使用视频是否会更好 这对我和艺术家来说更容易 因为他只会提供一个小视频 我将在我的应用程序完成后重现该
  • iPhone UIWebview——保存已下载的图像

    我有一个带有嵌入式 UIWebview Safari 控件的 iPhone 应用程序 我希望能够在本地存储某些网页的图像 我可以通过编程方式访问UIWebview下载图像的路径吗 或者我需要解析HTML 然后去网上找到图像资源并再次下载 我
  • 如何更改 iOS 5 中 UITabBarItem 中文本的颜色

    iOS 5 中有更多外观控制 我们如何更改 UITabBarItem 文本颜色 从默认白色变为其他颜色 编辑 工作解决方案 UITabBarItem appearance setTitleTextAttributes NSDictionar
  • UIToolBar 位于 UITabBar 之上?

    在 照片 应用程序的 相机胶卷 部分中 您可以单击右上角的按钮来编辑照片 这将底部选项卡栏替换为 UIToolBar 中的三个新按钮 我想做类似的事情 但我无法让我的 UIToolBar 位于选项卡栏的顶部 有没有办法指定图层顺序 或者我需
  • Objective-C 内存管理:发布时崩溃

    我是 Objective C 的新手 似乎无法正确理解内存管理代码 我有以下代码 Media myMedia self myMediaManager getNextMedia self navigationItem title self m
  • 如何让 iPhone 屏幕变暗

    我的 iPhone 屏幕上有一个刷新按钮 可以刷新当前视图中的表格 屏幕刷新得很漂亮 但是有没有办法让屏幕变暗 然后在表格刷新后再次变亮 您可以在要调暗的视图上放置一个带有黑色背景的非不透明视图 默认情况下 其 alpha 值为 0 因此是
  • 在 iPhone 上搜索 PDF

    经过两天尝试使用 Quartz 从 PDF 中读取注释后 我成功做到了并且发布我的代码 https stackoverflow com questions 4080373 get pdf hyperlinks on ios with qua
  • 如何在 iPhone 中查找本周的最后一天?

    在我的应用程序中 我使用以下代码来检索当前日期和星期 NSDate today1 NSDate date NSDateFormatter dateFormat NSDateFormatter alloc init dateFormat se
  • 获取在 iOS UIFont 中追踪字符的路径

    假设我在 iOS 应用程序中使用了自定义字体 Foo 我已将其添加到我的项目 plist 等中 并且我能够渲染UILabels之类的就很好了 现在 如果我想找出可以 追踪 该字体中的字母 P 的点序列 我将如何获得该点序列 例如 假设我想使
  • cocos2d-iphone-2.1-beta2 中的 CCScrollLayer 问题

    您好 我遇到了最新 cocos2d beta 中 CCScrollLayer 中所述的问题 主要是在编译时我得到 use of undeclared identifier CC GL BLEND 有没有办法解决这个有人发现的问题 您可以安全
  • iPhone 的翻译器?

    我对为 iPhone 制作一个解释器很感兴趣 这将是一个实验性的想法 但可能会很棒 我喜欢让我自 己的语言适合移动计算和数学的想法 我查阅了很多资料 发现有关 iPhone 上的口译员的信息很复杂 苹果会允许什么 我见过这个应用程序 这是一
  • 检测 iPhone 屏幕是否打开/关闭

    有没有办法检测 iPhone 的屏幕是打开还是关闭 例如 当按下手机的屏幕锁定按钮时 我一直在使用 void applicationWillResignActive UIApplication application 为此类事件做准备 在大
  • 增加 iPhone 的推送通知徽章

    是否可以在收到通知时增加徽章值 或者我应该将计数作为有效负载发送吗 如果我每次都将徽章值发送为 1 那么如果应用程序未打开 我如何增加应用程序图标中的徽章值 我已经使用了这段代码 但不起作用 void application UIAppli
  • 如何安全地重命名 iOS 分发配置文件?

    我几个小时前刚刚提交了我的第一个应用程序 现在处于 等待审核 状态 但我犯了一个错误 我已经命名了我的分配配置文件My Company Distribution Profile 我应该做的事情被命名为我的发行版配置文件My GAME Dis
  • 刷新单元格的 UITableView 队列

    我想知道如果调用 UITableView reloadData 时 UITableView 队列被刷新 是否有人可以回复我 我正在尝试这样做 但这对我没有帮助 有什么建议吗 如果你查看 UITableView 的头文件 你可以看到有一个名为

随机推荐