SKView textureFromNode导致图像模糊?

时间:2013-10-10 04:54:35

标签: sprite-kit

我观察到在拍摄相对清晰的SKSpriteNode时,使用SKView的textureFromNode拍摄快照时,生成的图像模糊不清。这甚至考虑了纹理过滤(默认情况下设置为线性)。我想知道这是否符合预期,或者SKView是否还有更多功能可以满足您的需求?

5 个答案:

答案 0 :(得分:3)

试试这个:

texture.filteringMode = SKTextureFilteringNearest;

使用此模式可以减少模糊,更加像素化。如SKTexture的参考文献中所述:

SKTextureFilteringNearest

使用纹理中最近的点绘制每个像素。此模式更快,但结果通常是像素化的。

我使用了一些代码,用于SKShapeNode的线条绘制。在设置filteringMode属性之前,我的线条随着时间的推移变得越来越模糊。使用此设置,即使SKShapeNode antialiased属性设置为YES,它仍然保持清晰且完全不模糊。

不确定您目前的实施情况,但也许这会对您有所帮助。

答案 1 :(得分:2)

如果您想要当前SKViewSKScene内容的“快照”图片,最好还是查看新方法drawViewHierarchyInRect:afterScreenUpdates:。这在我的测试中效果很好,尽管比预期慢一点。我认为您遇到的问题是,从SKTexture返回的结果textureFromNode:的大小是基于节点的calculateAccumulatedFrame,其大小可能是您希望/期望的大小。它也可以只是正确渲染纹理,你只是看到已经渲染的精灵的重新渲染形式(基本上,每次再次渲染时会变得更有损,这在逻辑上是有意义的)。

答案 2 :(得分:0)

texture.filteringMode = SKTextureFilteringNearest;

这对我的情况没有帮助。我不得不在我的SKShapeNode上关闭antialiased。然后textureFromNode(grid - > SKShapeNode)产生了清晰的纹理/ SKSpriteNode。

grid.antialiased = false

答案 3 :(得分:0)

我发现了另一种提高ShapeNodes创建纹理保真度的方法。

以x2的大小和宽度创建形状。 以相同的超大比例创建所有字体和其他形状。 确保您的定位相对于此总体尺寸(例如,不要使用绝对尺寸,使用容器的相对尺寸。)

当您将纹理创建为精灵时,它会很大 - 但随后应用

sprite.scale = 0.5; // if you were using 2x

(注意,如果您有子元素,缩放可能不是最佳解决方案 - 设置尺寸会更好)。

我发现这使得它看起来分辨率更高,没有颗粒感,没有字体,尖角的模糊性。

我还使用了tex.filteringMode = SKTextureFilteringLinear;

[编辑 - 我之前将其作为SKTextureFilteringNearest - 但是它会在直线上产生伪影 - 线性现在可以产生良好的直线]。

答案 4 :(得分:0)

texture.filteringMode = .nearest

可能会导致像素化,您也可以尝试

texture.filteringMode = .linear