问题标签 [sktilemapnode]

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 投票
0 回答
154 浏览

ios - 地牢生成算法正在生成不需要的结果

我编写了一个算法,使用 SpriteKit 在 Swift for iOS 中生成地牢。代码按预期运行,生成具有四个边的正多边形。但是当我切换到一个 8 路邻接组时,生成器开始搞砸了。

这是生成地牢的代码,其中包含用于表示房间和走廊的单个图块的一些屏幕截图。

这段代码会生成基本的、看起来很干净的地下城,如下所示:

图 1

图 2

图 3

我在 Aseprite 中绘制了一些图块,因为我想生成纹理贴图。我将它们放入一个 8 路邻接组中,以便将它们加载到地图中。当我构建并运行时,代码不再生成规则的四边形多边形。我开始得到不良结果:

就像几乎连接到另一个走廊但被切断的走廊:

图 4

和不规则形状的房间:

图 5

每次我运行代码时都会生成这些。它似乎只在我使用 8 路邻接组而不是单个图块时发生。

代码本身似乎没有任何问题。就在我添加瓷砖组时,它搞砸了。我想要的结果是带有相互连接的走廊的矩形房间。为什么瓷砖组会搞砸呢?我该如何解决?

是一篇文章,解释了算法在做什么以及它是如何做的。

0 投票
1 回答
89 浏览

swift - 在 Spritekit 上的 SKTileMapNode 中设置物理体

我正在使用 Spritekit 和 SKTileMapNode。我有一些瓷砖,我想为它们添加一个物理体以创建碰撞。我怎样才能做到这一点?

0 投票
0 回答
44 浏览

ios - 给定四边形的四个角位置,填充四边形之外的所有内容

我有一个 SKTileMapNode,我使用从教程翻译成 Swift 的 BSP 算法填充房间。完全翻译的算法可以在我的github repo上找到

我有一个自定义类,它给了我一个房间的四个角落位置。我使用四个角落位置来填充房间中的所有内容,如下所示:

Wherehallwaysroomare 我班级的两个数组都Room拥有四个角位置。

我知道如何填写房间内的所有内容,但我如何填写房间外的其他所有内容?我似乎无法弄清楚。做if room.minX >= column && room.maxX <= column && room.minY >= row && room.maxY <= row总是失败。

我需要填充房间外“泄漏”的所有内容,因为 Apple 的 SKTileMapNode 自动平铺有问题,我需要“平滑”它。

错误自动平铺的示例:

图 1 图 2

他们应该是什么:

图 3 图 4

我的想法是,因为自动平铺不起作用,所以用黑色瓷砖填充房间和走廊外泄漏的所有东西。希望这会强制自动平铺算法将图块正确放置为 4 面多边形。然而,我不知道如何填满房间外的所有东西。我的替代选择是自己制作一个自动平铺算法。我想避免这种情况,因为制作需要几天时间,而且很麻烦。

0 投票
1 回答
59 浏览

ios - SKTileMapNode 的颜色设置问题

我有一个自定义类,其中包含一个 SKTileMapNode(名为“gmap”)作为成员变量。我想使用 .color 属性根据用户交互重新着色节点。我使用以下代码更改颜色。(根据需要使用不同的 UIColors)

当我在自定义类的初始化程序中重新着色节点时,此方法工作正常,但在其他任何地方使用时不起作用。(节点仍然正确显示,但它的颜色没有改变)知道这里出了什么问题吗?SKTileMapNode 在初始化后不能重新着色吗?谢谢你的帮助。

编辑:我没有找到答案,但我通过删除节点并添加新节点找到了解决方法。请参阅下面的答案以获取完整说明。

0 投票
1 回答
302 浏览

swift - enableAutomapping 和 SKTileMapNode:以编程方式创建带边缘的形状?

我正在尝试以编程方式为 RPG 风格游戏中的对话框文本创建一个灵活的对话框。我设计了一个简单的方框图形,将其划分为所有正确的部分,并将其作为 8 路邻接组添加到我的图块集中。

在此处输入图像描述

我可以成功地将它添加到我的相机节点,但自动映射不起作用。我得到的只是一个由中心瓷砖组成的纯黑盒子。根据Apple的文档,enableAutomapping“指定瓦片地图是否使用像场景编辑器一样的自动映射行为”,所以我相信这个设置应该对我有所帮助。

它只选择中心瓷砖,忽略所有边缘/角落,我得到一个纯黑盒子。我正在寻找的行为是让 SpriteKit 根据我正在创建的形状选择合适的边缘和内部瓷砖。

这是我的代码(Swift 4.2)目前的样子:

0 投票
0 回答
397 浏览

ios - 使用 SpriteKit 进行等距深度排序

我正在使用 SpriteKit 制作一个相对简单的等轴测图。我已经尝试过使用编辑器以及通过代码创建它,每次,它似乎在各个图块之间都有一些“权重”,即使它们应该优雅地重叠,因为我只是设置了一个图块的样式.

这是我使用来自https://kenney.nl的图块的示例。果岭只是一块标准的草地,道路与它的大小完全相同。

当我在 XCode UI 中创建此地图时,或者如果我在代码中迭代并绘制它们,这种情况会继续发生。

但是,如果我要做一些事情,比如翻转瓷砖,然后用中间有草的道路来绘制它,那么它似乎会对“更多”的瓷砖进行排序,就像在这个例子中一样:

如果我去制作一个瓷砖组而不是另一个瓷砖组,它似乎会压倒它。

所以我的问题是,我怎样才能阻止他们使用这种行为?我已经尝试过不同的瓷砖地图,将它们嵌套在彼此之间等等......但归根结底,我无法让不同的瓷砖存在于同一个“平面”上。我已经尝试过使用代码、UI 等。如果可能的话,我想使用 SKTileMap 来使用下游功能,而不是自己做所有的数学运算,就像本文中的方法 ( http://bigspritegames .com/isometric-tile-based-game-part-1/ )

0 投票
2 回答
188 浏览

ios - SpriteKit Tileset 内存泄漏

我正在尝试使用 SpriteKit 创建 2d 平台游戏。游戏包含 21 个关卡,这意味着 21 个场景和 21 个图块集。每个场景包含几个 tilenodes,所有这些 tilenodes 只使用 1 个tileset。在某些时候,我发现我的游戏消耗了将近 2GB 的内存,有时由于内存问题而被终止。

在此处输入图像描述

我开始使用仪器调查这种内存泄漏的原因。我发现了 4 个泄漏,显示在附加的屏幕截图中。负责的库是 JavaScriptCore,我不知道这到底是什么意思。

在此处输入图像描述

因此,我继续调查并尝试从项目中删除代码块和资产,以了解发生了什么。

最后我的项目包含:

  1. GameViewController 看起来与 XCode 模板中的 GameViewController 完全一样。
  2. SKScene 的空子类
  3. 1个场景
  4. 21 套瓷砖

GameViewController 的代码:

}

因此,没有可能导致泄漏的代码,游戏仍然会消耗 2GB 的峰值。只有当我从项目中删除所有图块集时,除了关卡所需的图块集 - 内存消耗变得正常,例如~200mb。

在此处输入图像描述

我的猜测是 SpriteKit 将所有图块集加载到内存中,尽管场景的所有图块节点仅使用 1 个图块集。

此外,如果我将图块集放回项目并从场景中删除所有图块节点,则游戏效果很好。

我的问题是如何妥善处理这种情况?

谢谢!

更新1:附上内存图更新2:提供GameViewController代码

在此处输入图像描述

0 投票
1 回答
226 浏览

ios - 列和行索引高于 SKTileMapNode 中的列和行数

我想创建一个场景,我有按钮可以在 SKTileMapNode 内将光标从一个瓷砖移动到另一个瓷砖。.sks我在 Spritekit 场景编辑器的外部文件中创建了一个 10x8 SKTileMapNode 。要将光标位置设置在与磁贴完全相同的位置,我想注册磁贴的特定列和行索引,然后找出他的位置。使用函数numberOfColumnstileRowIndex给我比numberOfRowsand更高的值tileRowIndex,它们是 10 和 8。由于这个问题,我的光标显示在错误的位置。它甚至没有在任何瓷砖位置上对齐。

0 投票
1 回答
348 浏览

ios - 更改 SKTileMapNode 中特定图块的颜色

我正在创建一个基于圆形的游戏,其中我有一个操场作为 SKTileMapNode,每个瓷砖上都有草纹理,角色可以从一个瓷砖走到另一个瓷砖。每个角色都有自己的范围,他们可以在一轮中行走。我想显示这个范围,以便玩家可以看到所选角色的范围。我的问题:如何更改特定字符所在的瓷砖范围内的瓷砖的颜色?带有纹理的 SKSpriteNode 可以简单地通过 和 改变它们的颜色.color.colorBlendFactor这样我的绿草纹理就会得到例如红色的触感。如何使用 SKTileMapNode 中的特定图块执行此操作?

0 投票
1 回答
68 浏览

swift - 真实设备上的 SKTileMap 物理错误

我一直在开发一个SpriteKit使用平铺地图的 2D 游戏。SKPhysicsBody我用这个函数给了我的瓦片地图:

正如您在第一个屏幕截图中看到的那样,当我在模拟器上运行我的游戏时,一切正常,但是当我在我的真实 iPhone 或 iPad 上运行它时,瓷砖贴图物理(第二张图片)出现了一个错误。正如您在第二张图片上看到的那样,在我的真实设备上运行它时存在物理差距。你知道它可能是什么吗?

在此处输入图像描述

在此处输入图像描述

编辑:

不幸的是,它不适用于我的项目。物理形状不会正确匹配地图。 在此处输入图像描述