3

可能相关: 使用高分辨率纹理优化 SceneKit 性能

我正在将 a 映射SKScene到棋盘几何以创建棋盘游戏。场景需要相对较大(2048x1024),这样我才能放大动作并保留漂亮的细节。现在,为了解决这个常见问题,我已经知道了两种方法:

  • 缩小时使用较低分辨率的纹理(即 mipmapping) - 这不是问题,SceneKit对我有用。
  • 平铺场景以获得特写,并且仅显示屏幕上的那些平铺。

现在第二点让我思考。如何平铺 SKScene 并将它们映射到几何体上的不同位置?还有另一种方法可以使这项工作吗?


截图

这是几何: 没有纹理的简单几何图形。

这是以静态图像 (2048x1024) 作为纹理的几何图形: 具有图像纹理的几何图形。

这是以SKScene(2048x1024) 作为纹理的几何图形: 在此处输入图像描述

该场景不包含任何物理实体,只有大约 40 个SKSpriteNodes什么都不做。我需要它能够更改区域的颜色,也许添加一些额外的叠加层等。有没有办法SceneKit完全做到这一点?也许为每个领域创建一个几何图形?


已实施的答案

我现在尝试使用SceneKitonly 来实现相同的场景。每个区域都是一个四边形,使用包含预渲染边界的纹理。不同的混合模式有助于衬托纸张纹理。不幸的是,性能影响大致相同 - 我的结论是,它SpriteKit毕竟不是占用资源,而是节点数与高分辨率纹理相结合(遗憾的是,如果你不使用路径,则需要保持边界清晰) .

仅使用 SceneKit 的解决方案

4

3 回答 3

2

SKSpriteNodes 是您的领地吗?也就是说,每个区域一个 SKSpriteNode?从静态图像到 SKScene 时看到的巨大性能冲击,听起来 SpriteKit 是要杀死你的东西。

尝试使用 SCNShape 几何图形,每个区域一个,而不是使用 SpriteKit 派生的纹理,可能会为每个区域节点添加一个或两个 levelOfDetail 会很有趣。我不知道如何获得您正在使用的相同的深色调边界效果。但是你可以用 SCNShape 做一些有趣的效果,例如动画改变给定区域的挤压深度。

于 2017-01-14T23:17:48.650 回答
1

是的,您可以为每个区域使用独特的几何图形,为每个区域使用简单的四边形,然后添加一个类似于精灵(由纹理组成)的材质,使用 alpha 来表达每个区域。

通过这种方式,您可以为每个区域的每个状态(选择、点击、变灰,无论您拥有什么)拥有不同的纹理。

困难的部分将是布置所有这些四边形及其纹理以形成您的世界地图。您必须首先在 2D 或 3D 设计应用程序中执行此操作,这样您才能获得所有内容。然后将您在设计应用程序中使用的任何坐标系转换为适合您在 SceneKit 中使用的坐标系。

您很可能可以在您创建原始纹理的任何设计应用程序中进行第一次定位。只需为所有区域制作正方形/矩形,就像切片一样,然后开始写下它们的坐标和大小。

不好玩,但它会起作用,而且效率很高。我想。

于 2017-01-15T06:58:18.020 回答
0

SpriteKit 可能会影响您的帧速率。您是否在场景中启用了光栅化?确保没有在节点上进行缩放,并遵循苹果关于处理节点计数的建议。

于 2019-11-26T23:22:48.107 回答