[英]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.