繁体   English   中英

UIKit动态中的CGGeometry计算

[英]CGGeometry calculations in UIKit dynamics

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

在此处输入图片说明

假设使用参考1调用底部网格行,我想检查该块在哪个网格参考中。我通过使用CGGeomentry,CGRectContainsPoint([grid frame],然后将网格编号即1分配给块来进行此操作。如上图所示,它对单个块效果很好。

现在看第二张照片。

在此处输入图片说明

将第二个块堆叠在第一个块的顶部后,您会注意到网格第2行与第二个块之间存在间隙。 一旦更多的块彼此堆叠,此间隙将增加。 由于存在这种间隙,对于大于6的网格行,CGRectContainsPoint计算会给出错误的网格号。

换句话说,第一个块应分配有网格行1,第二个块应分配有网格行2。由于块的帧大小和网格帧的大小相同,因此对块10或块100应该如此。此间隙后,经过一些块,网格分配看起来不正确,即,块6的网格编号为5。

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

我的问题是,当网格框架大小和块框架大小相同时,为什么要获得此间隙。 他们不应该完全适合吗? 我如何摆脱这种间隙?

您可以看到,下图堆叠更多的块时,间隙越来越大 在此处输入图片说明

谢谢

不要将UIKit Dynamics用于物理模拟。 它不是为此设计的。 它旨在创建使动画具有物理感的动画。

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

实际上,我已经在博客中写过类似文章,该文章使用AutoLayout放置块可能有用?

您可以在此处查看自动布局游戏。

要么使用SpriteKit,要么不使用物理。

在大多数游戏中,我会避​​免使用物理(即在重力或其他力作用下的物理物体)。 甚至像Mario(2D侧平台游戏)和Flappy Bird之类的游戏也不使用物理。 他们使用非常精确地计算出的运动。

实际上,《马里奥》中的跳跃动作被分为几个不同的动画,以使计时跳跃和让使用者更容易地确定着陆点。 实际上,仅在大多数情况下,仅使用物理即可使游戏更难玩。

显然,像《愤怒的小鸟》这样的游戏是与众不同的,因为它们的本质需要物理学来模拟小鸟的飞行和方块的掉落。 但是用户不会与物理进行交互。 它只是根据他们先前的动作播放。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM