【问题标题】:CGGeometry calculations in UIKit dynamicsUIKit 动力学中的 CGGeometry 计算
【发布时间】:2016-04-14 02:10:13
【问题描述】:

我有一个使用 UiKit 动态实现的简单游戏。游戏中有块(红色的)与网格对齐,如下图所示。块从顶部落下并停留在底部网格中

假设使用参考 1 调用底部网格行,我想检查块在哪个网格参考中。我通过使用 CGGeomentry、CGRectContainsPoint([grid frame] 来执行此操作,然后分配网格编号,即 1到块。它适用于上图中使用的单个块。

现在看第二张照片。

一旦第二块堆叠在第一块的顶部,您会注意到网格第 2 行和第二块之间的间隙。一旦有更多的块堆叠在一起,这个间隙就会增加。由于这个间隙,CGRectContainsPoint 计算给出的网格行数超过 6 的网格数是错误的。

换句话说,第一个块应该分配给网格第 1 行,第二个块应该分配给网格第 2 行。由于块的帧大小和网格帧大小相同,因此对于块 10 或块 100 应该是这样。但是由于这个清除,在一些区块之后,网格分配看起来是错误的,即区块 6 的网格编号为 5。

我正在使用 UIKit 动态重力行为来使块从顶部落下,并使用碰撞行为来确定碰撞。我什至将弹性属性设置为 0.0 以降低弹性。

我的问题是为什么当网格框架大小和块框架大小相同时我会得到这个许可。他们不应该完全适合吗?我怎样才能摆脱这种许可?

你可以看到当更多的块堆叠在下面的图片中,间隙越来越大

谢谢

【问题讨论】:

    标签: ios objective-c uikit-dynamics


    【解决方案1】:

    不要将 UIKit Dynamics 用于物理模拟。它不是为它设计的。它旨在创建赋予它们物理感的动画。

    如果我在做这样的事情,我可能只会使用 UIKit 和 UIView 动画。

    事实上,我在博客上写过类似的文章,它使用 AutoLayout 来放置可能有用的块?

    You can see the auto layout game here.

    要么使用 SpriteKit,要么使用 SpriteKit,但仍然不要使用物理。

    对于大多数游戏,我会避免使用物理(即在重力或其他力下作用的物理物体)。甚至像马里奥(2D 侧平台游戏)和 Flappy Bird 这样的游戏也不使用物理。他们使用非常精确计算的动作。

    《马里奥》中的跳跃实际上被分成了几个不同的动画,以便用户更轻松地进行跳跃计时和着陆。在大多数情况下,仅使用物理实际上会使游戏更难玩。

    显然,像愤怒的小鸟这样的游戏是不同的,因为它们的本质需要物理来模拟小鸟的飞行和积木的下落。但是用户不与物理交互。它只是根据他们之前的行为进行的。

    【讨论】:

      猜你喜欢
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 2020-02-03
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多