问题标签 [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.
ios - 地牢生成算法正在生成不需要的结果
我编写了一个算法,使用 SpriteKit 在 Swift for iOS 中生成地牢。代码按预期运行,生成具有四个边的正多边形。但是当我切换到一个 8 路邻接组时,生成器开始搞砸了。
这是生成地牢的代码,其中包含用于表示房间和走廊的单个图块的一些屏幕截图。
这段代码会生成基本的、看起来很干净的地下城,如下所示:
我在 Aseprite 中绘制了一些图块,因为我想生成纹理贴图。我将它们放入一个 8 路邻接组中,以便将它们加载到地图中。当我构建并运行时,代码不再生成规则的四边形多边形。我开始得到不良结果:
就像几乎连接到另一个走廊但被切断的走廊:
和不规则形状的房间:
每次我运行代码时都会生成这些。它似乎只在我使用 8 路邻接组而不是单个图块时发生。
代码本身似乎没有任何问题。就在我添加瓷砖组时,它搞砸了。我想要的结果是带有相互连接的走廊的矩形房间。为什么瓷砖组会搞砸呢?我该如何解决?
这是一篇文章,解释了算法在做什么以及它是如何做的。
swift - 在 Spritekit 上的 SKTileMapNode 中设置物理体
我正在使用 Spritekit 和 SKTileMapNode。我有一些瓷砖,我想为它们添加一个物理体以创建碰撞。我怎样才能做到这一点?
ios - 给定四边形的四个角位置,填充四边形之外的所有内容
我有一个 SKTileMapNode,我使用从本教程翻译成 Swift 的 BSP 算法填充房间。完全翻译的算法可以在我的github repo上找到
我有一个自定义类,它给了我一个房间的四个角落位置。我使用四个角落位置来填充房间中的所有内容,如下所示:
Wherehallways
和room
are 我班级的两个数组都Room
拥有四个角位置。
我知道如何填写房间内的所有内容,但我如何填写房间外的其他所有内容?我似乎无法弄清楚。做if room.minX >= column && room.maxX <= column && room.minY >= row && room.maxY <= row
总是失败。
我需要填充房间外“泄漏”的所有内容,因为 Apple 的 SKTileMapNode 自动平铺有问题,我需要“平滑”它。
错误自动平铺的示例:
他们应该是什么:
我的想法是,因为自动平铺不起作用,所以用黑色瓷砖填充房间和走廊外泄漏的所有东西。希望这会强制自动平铺算法将图块正确放置为 4 面多边形。然而,我不知道如何填满房间外的所有东西。我的替代选择是自己制作一个自动平铺算法。我想避免这种情况,因为制作需要几天时间,而且很麻烦。
ios - SKTileMapNode 的颜色设置问题
我有一个自定义类,其中包含一个 SKTileMapNode(名为“gmap”)作为成员变量。我想使用 .color 属性根据用户交互重新着色节点。我使用以下代码更改颜色。(根据需要使用不同的 UIColors)
当我在自定义类的初始化程序中重新着色节点时,此方法工作正常,但在其他任何地方使用时不起作用。(节点仍然正确显示,但它的颜色没有改变)知道这里出了什么问题吗?SKTileMapNode 在初始化后不能重新着色吗?谢谢你的帮助。
编辑:我没有找到答案,但我通过删除节点并添加新节点找到了解决方法。请参阅下面的答案以获取完整说明。
swift - enableAutomapping 和 SKTileMapNode:以编程方式创建带边缘的形状?
我正在尝试以编程方式为 RPG 风格游戏中的对话框文本创建一个灵活的对话框。我设计了一个简单的方框图形,将其划分为所有正确的部分,并将其作为 8 路邻接组添加到我的图块集中。
我可以成功地将它添加到我的相机节点,但自动映射不起作用。我得到的只是一个由中心瓷砖组成的纯黑盒子。根据Apple的文档,enableAutomapping“指定瓦片地图是否使用像场景编辑器一样的自动映射行为”,所以我相信这个设置应该对我有所帮助。
它只选择中心瓷砖,忽略所有边缘/角落,我得到一个纯黑盒子。我正在寻找的行为是让 SpriteKit 根据我正在创建的形状选择合适的边缘和内部瓷砖。
这是我的代码(Swift 4.2)目前的样子:
ios - 使用 SpriteKit 进行等距深度排序
我正在使用 SpriteKit 制作一个相对简单的等轴测图。我已经尝试过使用编辑器以及通过代码创建它,每次,它似乎在各个图块之间都有一些“权重”,即使它们应该优雅地重叠,因为我只是设置了一个图块的样式.
这是我使用来自https://kenney.nl的图块的示例。果岭只是一块标准的草地,道路与它的大小完全相同。
当我在 XCode UI 中创建此地图时,或者如果我在代码中迭代并绘制它们,这种情况会继续发生。
但是,如果我要做一些事情,比如翻转瓷砖,然后用中间有草的道路来绘制它,那么它似乎会对“更多”的瓷砖进行排序,就像在这个例子中一样:
如果我去制作一个瓷砖组而不是另一个瓷砖组,它似乎会压倒它。
所以我的问题是,我怎样才能阻止他们使用这种行为?我已经尝试过不同的瓷砖地图,将它们嵌套在彼此之间等等......但归根结底,我无法让不同的瓷砖存在于同一个“平面”上。我已经尝试过使用代码、UI 等。如果可能的话,我想使用 SKTileMap 来使用下游功能,而不是自己做所有的数学运算,就像本文中的方法 ( http://bigspritegames .com/isometric-tile-based-game-part-1/ )
ios - SpriteKit Tileset 内存泄漏
我正在尝试使用 SpriteKit 创建 2d 平台游戏。游戏包含 21 个关卡,这意味着 21 个场景和 21 个图块集。每个场景包含几个 tilenodes,所有这些 tilenodes 只使用 1 个tileset。在某些时候,我发现我的游戏消耗了将近 2GB 的内存,有时由于内存问题而被终止。
我开始使用仪器调查这种内存泄漏的原因。我发现了 4 个泄漏,显示在附加的屏幕截图中。负责的库是 JavaScriptCore,我不知道这到底是什么意思。
因此,我继续调查并尝试从项目中删除代码块和资产,以了解发生了什么。
最后我的项目包含:
- GameViewController 看起来与 XCode 模板中的 GameViewController 完全一样。
- SKScene 的空子类
- 1个场景
- 21 套瓷砖
GameViewController 的代码:
}
因此,没有可能导致泄漏的代码,游戏仍然会消耗 2GB 的峰值。只有当我从项目中删除所有图块集时,除了关卡所需的图块集 - 内存消耗变得正常,例如~200mb。
我的猜测是 SpriteKit 将所有图块集加载到内存中,尽管场景的所有图块节点仅使用 1 个图块集。
此外,如果我将图块集放回项目并从场景中删除所有图块节点,则游戏效果很好。
我的问题是如何妥善处理这种情况?
谢谢!
更新1:附上内存图更新2:提供GameViewController代码
ios - 列和行索引高于 SKTileMapNode 中的列和行数
我想创建一个场景,我有按钮可以在 SKTileMapNode 内将光标从一个瓷砖移动到另一个瓷砖。.sks
我在 Spritekit 场景编辑器的外部文件中创建了一个 10x8 SKTileMapNode 。要将光标位置设置在与磁贴完全相同的位置,我想注册磁贴的特定列和行索引,然后找出他的位置。使用函数numberOfColumns
并tileRowIndex
给我比numberOfRows
and更高的值tileRowIndex
,它们是 10 和 8。由于这个问题,我的光标显示在错误的位置。它甚至没有在任何瓷砖位置上对齐。
ios - 更改 SKTileMapNode 中特定图块的颜色
我正在创建一个基于圆形的游戏,其中我有一个操场作为 SKTileMapNode,每个瓷砖上都有草纹理,角色可以从一个瓷砖走到另一个瓷砖。每个角色都有自己的范围,他们可以在一轮中行走。我想显示这个范围,以便玩家可以看到所选角色的范围。我的问题:如何更改特定字符所在的瓷砖范围内的瓷砖的颜色?带有纹理的 SKSpriteNode 可以简单地通过 和 改变它们的颜色.color
,.colorBlendFactor
这样我的绿草纹理就会得到例如红色的触感。如何使用 SKTileMapNode 中的特定图块执行此操作?