【问题标题】:Changing SKSpriteNode Frame? Isometric challenges改变 SKSpriteNode 框架?等距挑战
【发布时间】:2014-03-07 22:23:44
【问题描述】:

我希望我们能够通过我们以等距风格设计的游戏来解决这个有趣的挑战。任何帮助都会很棒!

问题

有没有办法将边界框框架从正方形更改为另一种形状?可以戴口罩吗?

问题

我们的问题是我们需要节点的可点击区域不是正方形的。由于我们正在平铺节点,它们的边界框相互重叠,我们无法准确地点击我们想要的平铺。希望我们的下图能够向您展示我们正在设计什么、我们的问题以及我们的可点击区域需要是什么。

有没有办法在 Sprite Kit 中改变这一点,或者用等距样式是不可能的?

再次感谢您。

【问题讨论】:

  • 我很好奇如何解决这个问题。 SKSpriteNode 的框架是只读属性,因此无法更改。框架永远不能是矩形以外的任何东西,也不能旋转。我认为您必须使用 UIBezierPaths 和这个很棒的 SKButton 类创建一个自定义形状的按钮:stackoverflow.com/questions/19082202/…
  • 我知道这已经晚了,但我想出了一个解决方案来解决我遇到的类似问题。 stackoverflow.com/questions/23051961/… 本质上,创建一个 SKSPriteNode 的子类,并给它一个 UIBezierPath 属性,即菱形的形状。在您的 touchesBegan: 方法中,检查触摸的位置是否位于 UIBezierPath 属性内。希望这可以帮助某人!

标签: objective-c frame sprite-kit bounding-box


【解决方案1】:

我一直深陷这条道路,我可以说实现自己的命中检测比试图强制 spritekit 执行您的计划要容易得多。

这并不难。只需在您的图块上执行一个自定义的 hittest 函数,然后在鼠标按下时循环遍历它们并测试它们。

有一个非常简单的算法可以测试你的形状,但平心而论,你可能只测试菱形的内圆,所以只需测试到精灵中心的距离是否小于点击圆的半径。轻松愉快。

【讨论】:

    【解决方案2】:

    可以通过路径[SKPhysicsBody bodyWithEdgeLoopF​​romPath:(CGPath)]创建SKPhysicsBody; 您将不得不调整路径以获得所需的形状,但如果您仅将其用于瓷砖,那应该没问题。

    检查 Node.PhysicsBody 是否包含接触点。

    如果您需要该方法,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 2018-09-24
      • 1970-01-01
      • 2014-12-21
      相关资源
      最近更新 更多