问题标签 [sktextureatlas]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1057 浏览

ios - TextureAtlas 工具未读取纹理图集 - SpriteKit 纹理图集生成器错误

我试图用一个简单的动画制作一个节点,所以我用每个单独的帧创建了一个动画作为 .png 文件,我将它们全部放在一个文件夹中,并将其命名为 stoneanimation2.atlas 。

这是我试过的代码:

它以前工作过,当时我只有大约 10 帧。但我决定添加更多,我认为它与图集本身搞砸了,因为 Xcode 说“SpriteKit Texture Atlas Generator Error”这是错误消息:

每次我完全制作一个新的地图集,或者只是重命名它,看看它是否有效,我都会得到同样的错误。此外,在构建设置中,我将“启用 Atlas Generator”设置为“YES”。我已经尝试过重置IOS模拟器,我能想到的一切!请帮忙!

0 投票
1 回答
315 浏览

ios - 如果您预先设置了 SKAction,您是否需要预加载 SKTextureAtlas?

通过为我所有的游戏内动画预先设置 strong SKActions 是 Sprite Kit 缓存的实际图像数据以供将来使用。我想了解的是,如果我将所有动画设置为保留SKAction的 s 是否还有预加载SKTextureAtlas它们最初来自的任何点,我的想法是否定的,因为SKActions 的图像已经加载到内存中?

我从 Apple Adventure Example 中对此进行了猜测,尽管作者使用了很多(es),但他们在任何代码中SKTextureAtlas都没有做任何事情。preloadTextureAtlases

0 投票
1 回答
1901 浏览

drawing - 使用 spritekit 在单个绘图过程中渲染节点?

当我四处寻找有关 spritekit 纹理的信息时,我偶然发现了这句话:

如果一个节点的所有子节点都使用相同的混合模式和纹理图集,那么 Sprite Kit 通常可以在一次绘制过程中绘制这些精灵。另一方面,如果孩子被组织起来,使得每个新精灵的绘图模式都发生变化,那么 Sprite Kit 可能会像每个精灵一个绘图通道一样执行,这是非常低效的。

但是看看这个:

具有相同纹理的瓷砖(我向你保证这是一种纹理,而不仅仅是一种颜色) 无纹理瓷砖

具有自己纹理的瓷砖 纹理瓷砖

尽管使用的所有纹理都来自同一个图集,但绘制计数的差异为 40。

我对“地图集”这个词的解释是错误的吗?

这是我存储图像的地方:

纹理图集

我的示例是“纹理图集”,还是此处“图集”的定义是一个包含所有所需图像的单个 .png,并且从中切出单个图块?

或者问题可能在于我如何加载/其他东西?

谢谢!

0 投票
1 回答
449 浏览

ios - 超过 SKTextureAtlas 图像大小?

今天向现有图集添加图像文件时SKTextureAtlas发出警告说我“超过了图集图像大小”并且图集将一分为二(大概在编译时,因为它在编辑器中看起来完全一样)。编译后警告消失了,我还能找到更多提及它吗?

从那以后,我通过创建两个新图集自己手动拆分图集,我的问题是:我是否需要自己进行拆分,这是一个警告,说您真的应该将图集一分为二,或者只是让您知道 Xcode编译时会为您执行此操作吗?让 Xcode 进行拆分也有任何开销,我假设最好自己做。

0 投票
1 回答
206 浏览

ios - 使用文件夹引用而不是组创建纹理图集

我项目中的许多资源都位于文件夹引用而不是组中,即蓝色文件夹,而不是黄色文件夹。这是出于多种原因 - 我考虑了这两种解决方案,并且文件夹引用是更好的选择(我做了类似的事情

imagePaths = [[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:directory];

)

根据本指南,我只是重命名包含文件夹,但是如果我将任何包含资产的文件夹重命名为文件.atlas,这将被视为路径名的一部分,并且找不到任何内容。

使用TexturePacker之类的东西手动生成地图集的唯一方法是什么?我的代码在很大程度上依赖于路径名,所以我必须做很多重写......

0 投票
1 回答
114 浏览

ios - SKTextureAtlas 过滤最近邻

我有一个SKTextureAtlas包含 SKTextures 列表,但问题是,每当我从中加载 SKTexture 并声明其上的过滤是 SKTextureFilteringNearest 时,它都会过滤它Linear

我只有在低于 的 iOS 上才有这个问题7.1,但在 7.1 上一切正常。

编辑#1

Theis Egeberg 建议:

我很确定 7.1 之前的行为是过滤模式在图集中的所有纹理之间共享。如果您想在 7.0 中使用“最近”,您需要为最近的和线性的一个纹理图。当然,您可以创建一个封装两者的辅助类。”

我该怎么做?

0 投票
1 回答
617 浏览

objective-c - Mac SpriteKit - 无法在编译时创建纹理图集

我在 iOS 中使用 SpriteKit 已经有一段时间了;现在我正在为 Mac 开发一个应用程序。

我像往常一样设置了纹理图集:

  1. 为项目和目标启用纹理图集生成(我从“基于文档的应用程序”模板开始,而不是“SpriteKit 游戏”。它有不同的构建设置)。
  2. 将所有单独的纹理图像文件拖到一个文件夹中,
  3. 将文件夹重命名为"Something.atlas" ,
  4. 将文件夹添加到项目中,
  5. 在运行时,按名称(即[SKTextureAtlas atlasNamed:@"Something"];)创建图集。
  6. 按名称(即[_atlas textureNamed:@"MyTexture"];)获取单个“纹理”并使用它们创建SKSpriteNode实例。

我正在异步预加载图集,但永远不会调用完成处理程序(请参阅注释):

当我检查构建产品的包内容(例如MyApp.app)时,在资源子目录中我可以看到 atlas 文件夹(“Something.atlasc”),但它只包含一个没有条目的 .plist 文件,并且图像资源无处可寻……那又是什么呢?

0 投票
2 回答
277 浏览

ios - 为什么 SpriteKit 将所有设备尺寸(~ipad 和@2x~ipad)纹理加载到内存中?

我正在使用以下代码将纹理加载到 SpriteKit 中以用于动画 -

我的问题是,在包含视网膜 iPad、非视网膜 iPad 和视网膜 iPhone 的每个图像的三个版本的图集上使用上述代码会导致应用程序使用所有这些图像的内存。不仅仅是它需要的那些。

我怎样才能使加载到内存中的唯一纹理是应用程序运行所需的设备?

0 投票
1 回答
137 浏览

sprite-kit - 精灵套件纹理图集留在内存中?

目前,我正在使用 sprite kit 在瓷砖地图上开发一款射击类游戏。“敌人”是从一组纹理图集中加载的,我在其中存储了他们所有的动画帧。到目前为止,地图上的纹理以及所有敌人和玩家的平均内存消耗约为 110 到 130 mb。我观察到的问题是当我切换级别时。基本上,该级别的新纹理将与敌人的纹理一起加载。现在,当我离开第一级时,我尝试释放所有纹理图集,但内存消耗似乎仍在上升。我已经看到它达到 150 到 180 甚至偶尔 200 mb。

纹理图集被取消引用后是否保留在内存中?考虑到我有几个不同的关卡,每个关卡都有自己独特的地图和独特的敌人,我认为这是一个潜在的问题。根据我的其他阅读资料,情况似乎是这样。如果 sprite kit 正在处理何时何地释放纹理图集,我不确定我是否最终会遇到与我正在使用的纹理数量有关的内存警告问题。

0 投票
1 回答
113 浏览

sprite-kit - 无法从 SpriteKit 中的纹理图集中过滤纹理

我有一个非常烦人的问题...

我有一个基于像素艺术的游戏,所以使用的纹理是 8x8,然后放大到 128x128 或任何需要的。

为此,我需要做的就是说texture.filteringMode = SKTextureFilteringNearest

现在这几乎适用于所有东西——除了纹理图集。从纹理图集中提取纹理会导致纹理拒绝切换过滤模式。需要注意的一点是,它似乎可以从设置纹理图集的标准过程中工作,但是当我的纹理图集是单例时它不起作用。

现在通常,我只是认为我设置错了,但我认为这个问题出在 SpriteKit 上。原因如下:

1)这个bug直到最近才发生,我没有改变任何东西

2) 该错误仅发生在 iOS 7 中,而不发生在 7.1 或 8+ 中

3)问题不在于过滤模式错误-过滤模式设置为0,这是最接近的(我测试过,记录每一帧,模式是正确的-但视觉上不正确)

所以它是一个渲染错误。但这没有任何意义,尤其是当它似乎有点工作时。其他人有任何意见吗?我很感激任何事情,我也会尝试更多的事情。谢谢!

注意-我想强调的是,代码原样在 ios7.1+ 中工作得很好,所以代码以某种形式工作......但它也不是 7.1 的独特功能,因为它曾一度对我有用。