SpriteKit:如何在没有 SKShapeNode 的情况下绘制自定义形状?

Posted

技术标签:

【中文标题】SpriteKit:如何在没有 SKShapeNode 的情况下绘制自定义形状?【英文标题】:SpriteKit: How to draw custom shapes without SKShapeNode? 【发布时间】:2016-08-06 23:39:11 【问题描述】:

从 Apples 对 SKShapeNode 的类参考以及许多开发人员那里,我听说使用 SKShapeNode 来绘制你想经常在视图上绘制的自定义形状是一个坏主意,因为它的性能很差。

确实,一个带有一些自定义形状的简单应用程序将我的 CPU 提高了 80% 并使用了大约 80MB 的 RAM(在设备上更好一点)。

那么,我如何在不使用 SKShapeNode 的情况下绘制箭头之类的形状,因为我喜欢使用 bezierpaths 绘制的想法,因为我不需要关心显示大小。

如何在不降低质量的情况下绘制带有纹理的箭头,因为当我移动触摸拉伸箭头时它会拉伸我的图像。使用 SKShapeNode 执行此操作效果很好,但性能很差。

【问题讨论】:

"在设备上会好一点" 还有什么你一直在运行你的应用程序?不要考虑模拟器。用户不会在 sim 上运行您的应用程序 :) 您也可以将形状转换为指定的纹理,但您可能应该在游戏开始之前执行此操作。否则你也可能会遇到延迟,因为这些纹理转换成本很高...... 【参考方案1】:

您始终可以使用一个SKShapeNode 节点来创建形状,并使用path 属性来设计形状。然后使用let texture = scene.view.textureFromNode(shapeNode) 从场景视图中从SKShapeNode 创建一个纹理,并将新纹理放入SKSpriteNode

【讨论】:

是的,我知道,我已经这样做了。但我觉得这并没有太大帮助。我的 CPU 仍然高达 60-80%。我这样做是为了一个简单的瓦片层,它显示了我从 SKShapeNodes 构建的 13 个瓦片。平局计数现在仅显示 13 次平局。该屏幕上什么都没有发生,只显示 13 个图块,但我的 CPU 使用率为 65%,RAM 使用率约为 70MB。难道我做错了什么。从形状转换为精灵非常容易,所以我确定我在转换时没有做错任何事情。 不能告诉你,如果你只有精灵并且你有 65% 的 cpu 使用率,那么你需要评估代码 @KnightOfDragon - 这是一项很棒的技术,我在我的应用程序中成功实现了。但是,我需要从 SKShapeNode 弧创建大约 60 个圆形纹理。当我这样做时,某些没有足够内存的设备出现内存错误。你知道如何有效地做到这一点吗? 不知道你在做什么 60 圈没什么,你可能有保留周期发生 我制作了包含数千个节点的 GameOfLife。是否可以绘制正方形而不是 Add New Node 或更新 Added Node ? (在单视图中绘制多个方形/自定义形状/线条/像素处理)(如 Python-Turtle)

以上是关于SpriteKit:如何在没有 SKShapeNode 的情况下绘制自定义形状?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SpriteKit 中模糊场景?

如何在 spriteKit swift 4 中制作无限背景

如何以编程方式截屏(Swift、SpriteKit)

如何隐藏 SpriteKit 游戏的状态栏? [复制]

如何使用 swift 使用带有 spriteKit 的情节提要

SpriteKit 如何支持多种屏幕尺寸?