我有一个使用UiKit动态实现的简单游戏。游戏有块(红色的)与网格对齐,如下面所示,picture.The块从顶部落下,在底部网格中休息

假设底部的网格行是用引用1调用的,我想检查块在哪个网格引用中。我使用CGGeomentry,CGRectContainsPoint(网格框架)来做这件事,然后给块分配网格号,即1。对于上面图片中使用的单个块,它工作得很好。
现在看一下第二张图片。

将第二个块堆叠在第一个块的顶部后,您可以注意到具有栅格行2和第二个块的间隙。一旦更多的块堆叠在一起,这个间隙就会增加。由于此间隙,CGRectContainsPoint计算会为大于6的栅格行提供错误的栅格号。
换句话说,第一个块应该被分配网格行1,第二个块应该被分配网格行2。由于块帧大小和网格帧大小相同,这应该适用于块10或块100。但由于这种间隙,在一些块之后,网格分配看起来是错误的,即块6的网格号为5。
我正在使用UIKit动力学,重力行为来使块从顶部坠落,并使用碰撞行为来确定碰撞。我甚至将弹性属性设置为0.0,以减少弹力。
我的问题是,当网格帧大小和块帧大小相同时,为什么我会得到这个间隙。难道他们不应该完全适应吗?我怎样才能摆脱这个通行证?
你可以看到当更多的积木堆叠在下面的图片中时,间隙会变得更大

谢谢
发布于 2014-08-21 16:03:16
不要使用UIKit动力学进行物理模拟。它不是为它而设计的。它是为创建动画而设计的,这些动画给人一种物理感。
如果我做这样的事情,我可能只会使用UIKit和UIView动画。
事实上,我已经在博客上写过一些类似的东西,它使用AutoLayout来放置块,这可能会很有用?
You can see the auto layout game here.
或者使用SpriteKit,但仍然不使用物理。
在大多数游戏中,我会避免使用物理(即物理物体在重力或其他力的作用下)。即使像马里奥(2D侧平台)和Flappy Bird这样的游戏也不使用物理。他们使用非常精确的计算动作。
Mario中的跳跃实际上被分成了几个不同的动画,使得用户可以更容易地对跳跃和落地进行计时。在大多数情况下,仅仅使用物理实际上会使游戏变得更难玩。
显然,像“愤怒的小鸟”这样的游戏是不同的,因为它们的本质需要物理来模拟小鸟的飞行和积木的坠落。但是物理并不是由用户与之交互的。它只是根据他们之前的行为来发挥作用。
https://stackoverflow.com/questions/25420982
复制相似问题