【问题标题】:CGRectIntersectsRect tolerate some points before reactionCGRectIntersectsRect 在反应前容忍一些点
【发布时间】:2016-05-02 05:24:53
【问题描述】:

我正在制作一个反应游戏,你可以在其中消灭敌人并获得积分,但如果敌人节点与玩家节点相交,则会减少生命值。 这是一个反应游戏,所以我想在十字路口给出一些容忍点。因此,如果它们相交,我不希望立即看到减少。

这是我的代码:

 if (CGRectIntersectsRect(enemy.frame, player.frame)) {
    lives--;
}

我的目标是交叉口的容忍阈值。 我希望有一个人可以帮助我。 (目标 c 中的代码)

【问题讨论】:

  • 您是否尝试过为此目的而简单地减小enemy.frame 或player.frame 的大小?如果你把它们变小,命中将被“稍后”检测到
  • 如果您使用的是 SpriteKit,那么我强烈建议您使用内置的物理引擎进行碰撞,通过SKPhysicsBody。我也同意 luk2302,只是减小物理体的大小。
  • 我不会工作,因为我的游戏需要一个不断变化的物理体,这是不可能的。 @luk2302 缩小框架是什么意思?你的意思是图像?但这不是我想要的......
  • luk2302 提出的建议是您生成两个新矩形,它们从两个框架矩形中插入并测试它们的交集。
  • @CRD 你能给我一个代码示例吗?

标签: ios objective-c sprite-kit 2d 2d-games


【解决方案1】:

从问题上的 cmets 来看,我猜您不理解“插入”的含义。

如果您有一个原点为 (10,20)、宽度为 100、高度为 50 的矩形,那么如果您在 x 轴上将矩形插入 10,在 y 轴上插入 5,则结果是一个具有原点 (20 ,25),宽 80,高 40。

请注意,插入矩形包含在原始矩形中。 @luk2302 建议不是测试两个对象的框架矩形是否相交,而是测试两个较小的矩形是否相交。您可以通过将框架矩形插入一些量来生成这些较小的矩形。

您当然可以用几行代码直接计算插入矩形,但有一个 API 调用 CGRectInset(还有 NSInsetRect)可以在一行中为您完成。

HTH

【讨论】:

  • 好的,现在我明白它的意思了,但我仍然不知道如何同时实现这个 CGRectInset 和 CGRectIntersectsRect 来检测重叠。对不起所有这些菜鸟......
  • ??如果你有一个变量x,一个函数sqroot,和一个函数sin,你如何计算xsqrootsin并将结果放入ans? (1) tmp = sqroot(x); ans = sin(tmp); 或更直接 (2) ans = sin( sqroot(x) )。现在你有两个函数,两个矩形,你想把它们组合起来......
猜你喜欢
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 2012-01-19
  • 2012-05-09
  • 2012-03-24
相关资源
最近更新 更多