【问题标题】:Detect collision with line, tetris like game检测与线的碰撞,类似俄罗斯方块的游戏
【发布时间】:2014-07-31 09:32:59
【问题描述】:

我正在做类似俄罗斯方块的游戏。有物体从屏幕的顶部落到底部。当一堆物体到达线时,游戏就结束了。
我试图设置一个布尔值来检测对象何时在游戏结束的行中通过 2 次,但它不是那样工作的,所以我真的不知道该怎么做。
也许我们可以检测到物体是否在线上超过 2 秒?
谢谢

编辑:

为了简化问题,我将屏幕顶部的线 (self.frame.height) 放在了这条线上,我在这条线下生成了对象,因此在游戏结束之前它们永远不会越过这条线。

现在的问题是我必须在该线下方 40 像素处生成对象,或者在生成点检测到碰撞。 (如果我设置 usesPreciseCollisionDetection = true,它什么也不做)。

那么40像素碰撞检测正常吗?

【问题讨论】:

  • 你可以测试一块是否接触到线,并且它的physicsBody的resting属性是YES。
  • 我试过了,但我不能使用physicsbody.resting,因为有些项目是四舍五入的,并且移动得很少
  • 为您的平铺对象创建一个 BOOL 属性。当它接触另一个对象时,将此 BOOL 设置为 yes。如果 BOOL yes 对象触及线,则游戏结束。
  • 嗯,这是个好主意,但在我的游戏中,有几个项目从顶部掉落,并且项目从一开始就可能相互碰撞
  • 如果一个节点的physicsBody.velocity小于一个小数并且碰到了线呢?

标签: ios swift sprite-kit


【解决方案1】:

为什么该项目会通过 2 次?项目总是向下移动。所以真的,一旦一个项目超过了这条线,你知道它永远不会超过(好吧,这不是真的 - 因为你可以旋转一个项目,你可以得到一个长的水平和然后将其旋转到垂直......俄罗斯方块项目是否水平出来?)。

所以真的,你的测试会更多“它永远不会完全越界”。例如。如果您知道一个项目以 X 速度移动,您可能只需要计算从顶部移动到超过线所需的时间,然后等待那么长时间,然后查看它是否仍然与线上方的顶部区域相交。如果是这样,游戏就输了。

或者,当一个项目停在另一个项目上时,您可以设置一个标志。如果设置了该标志,并且该项目仍然与线上方的区域相交,则游戏失败。

PS - 请记住,俄罗斯方块是一个品牌名称。请务必为您的游戏命名。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    相关资源
    最近更新 更多