【问题标题】:Position stroke in SKShapeNode [closed]在 SKShapeNode 中定位行程
【发布时间】:2016-09-23 04:00:54
【问题描述】:

是否可以在SKShapeNode 进行内击?默认情况下,它环绕中间线。例如,如果描边 6 个像素,则 3 个像素在一侧,另外 3 个像素在另一侧……必须所有 6 个像素都在里面。

附:对不起我的英语。

【问题讨论】:

  • 只需将形状在每个维度上缩小 3 个像素(使用提供的示例),这样笔画就在您想要的位置
  • @Nik,视觉上这是一个很好的答案,但它会影响形状的实际大小(我们想要一个 12 x 12 的框,所以我们将其设为 6x6 以补偿 3 像素外部笔划, 最终的形状是 12x12 还是 6x6)
  • @Knight0fDragon 对...如果他/她将其用于游戏的重要部分,他们是否应该使用图像(SKSpriteNode)来代替?我听说 SKShapeNodes 之前已经引起了问题。 IE。内存泄漏、滞后等...
  • @Nik,不知道他们是否在 iOS 10 中修复了它,但有理由使用 SKShapeNode 而不是 SKSpriteNode,这取决于设计。就像在这种情况下,使用中风。如果我们要缩放形状,笔划将保持相同的大小,(我认为,我不经常使用它,如果不使用“调整形状大小”)这在SKSpriteNode 中不起作用,边框会变粗
  • @Knight0fDragon 好吧。很高兴知道。对于您之前所说/询问的有关笔划不属于形状的内容,我认为笔划算作形状的一部分。我不是 100% 确定,但我隐约记得前段时间测试过这个......我现在也会检查

标签: ios objective-c xcode sprite-kit


【解决方案1】:

重要提示:如果您对描边使用小于 1 的 alpha 值,由于描边颜色和形状颜色之间的颜色混合,这不会给出很好的外观。

使形状在每个方向(上、下、左和右)上缩小 3 个像素(使用问题中提供的示例),这样笔画就在您想要的位置。由于笔划算作形状的一部分,因此您不必担心形状的大小会变小,并且当您触摸笔划时,它仍然算作触摸形状。

虽然笔划保持一半在新形状的内侧,一半在新形状的外侧,但笔划位于原始形状所在的内侧,并且看起来与原始形状大小相同,而笔划看起来像是完全打开的里面。

请注意,要获得在每个维度上缩小形状所需的像素数量,只需将所需笔划的大小除以 2。

如果您尝试将笔划“放置”在形状的外侧,而不是将形状减少多少像素,只需在每个方向上增加相同的数量即可。

请记住,这更像是一种 hack,而不是解决方案,因为没有办法(至少我知道)将笔划移动到形状的内部或外部。 p>

【讨论】:

  • 如果将形状缩小 3 个像素,为什么笔画/轮廓不也将其位置缩小 3 个像素?
  • @Confused 我不完全明白你在问什么,但我会尝试一下。将形状缩小 3 个像素(使用示例)会更改形状,因此笔画的一半不是在最初所需的形状大小内,一半在外面,而是看起来笔画都在原始大小的形状的内侧。然而,形状刚刚在每个维度上都被缩小/缩小以产生这种效果
  • 但是笔画不是根据形状来画的吗?缩小形状,笔画随之缩小,对吧?
  • @Confused 这就是重点。这是造成整个笔划在形状内的效果的一部分
  • “顺便说一句,我认为没有办法在形状的内部或外部添加笔划。这就是为什么没有简单的解决方案”我认为这就是答案那么问题来了。在 SpriteKit 中可能无法实现
【解决方案2】:

刚刚想到了一种替代方法来处理更复杂的形状。

我们没有缩小形状,而是将笔画大小加倍,所以现在 6 变成了 12。这将使我们在外部得到 6,在内部得到 6。

我们使用 SKCropNode,在描边之前使用我们形状的蒙版,然后将形状添加为子形状。这应该会给我们想要的结果。

这应该适用于所有场景,例如,如果我们想要外部笔画 2 和内部笔画 4,我们给形状的笔画为 8,我们给蒙版形状的笔画为 4

请注意,我没有对此进行测试,这都是我的想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多