ios - 离机时SKTileMapNode消失,不再出现
问题描述
我有一个使用平铺地图作为背景的 SpriteKit 平台游戏。有问题的背景位于主要内容上方 1 个屏幕高度(位于屏幕外),充当玩家上方的森林树冠。我以编程方式完成,如下所示:
let screenWidth = UIScreen.main.bounds.width
let screenHeight = UIScreen.main.bounds.height
let columns = 20
let rows = 1
let tileSize = CGSize(width: screenWidth, height: screenHeight)
let container = SKSpriteNode()
let tileDefinition = SKTileDefinition(texture: MainData.textureAtlas.textureNamed("someTexture"), size: CGSize(width: screenWidth, height: screenHeight))
let tileGroup = SKTileGroup(tileDefinition: tileDefinition)
let tileSet = SKTileSet(tileGroups: [tileGroup])
let layer = SKTileMapNode(tileSet: tileSet, columns: columns, rows: rows, tileSize: tileSize)
container.position = CGPoint(x: screenWidth*0.5, y: screenHeight*1.5)
container.size = CGSize(width: CGFloat(columns)*screenWidth, height: screenHeight)
container.zPosition = 3.0
layer.fill(with: tileGroup)
container.addChild(layer)
addChild(container)
一个摄像机节点跟随玩家。
问题:如果玩家跳起来,SKTileMapNode
当他下来时消失。它永远不会再次出现。它的父节点 ,container
仍然可见,所以我认为问题出在SKTileMapNode
, 而不是container
.
我尝试了什么:
我尝试了以下方法,并检查了数字 2-5 SKTileMapNode
:
- 设置
view.shouldCullNonVisibleNodes = false
。 - 检查
alpha
值。它总是1.0
。 - 检查
position
. 它总是CGPoint(x: 0, y: 0)
。 - 检查
anchorPoint
. 它总是CGPoint(x: 0.5, y: 0.5)
。 - 检查
zPosition
. 它不会改变,并且没有其他节点可以遮盖它SKTileMapNode
或其父节点。设置更高的值对问题没有影响。 - 检查是否
container
仍然可见。确实如此。
关于剔除:
似乎问题应该与剔除有关,但设置view.shouldCullNonVisibleNodes=false
对情况没有影响。我还检查以确保SKTileMapNode
始终作为container
. 这是。我想这意味着该节点没有被剔除。但是,如果我将其定位container
为始终在屏幕上,则根本不会出现问题;SKTileMapNode
遗骸可见。这让我很困惑,因为这些似乎是相互矛盾的事实。
在设备上: 至少使用模拟器,问题不会出现在 SE 和 iPhone 8 等旧款 iPhone 上。它只会出现在 iPhone 11 和 iPhone 12 等较新的 iPhone 上。 iPhone 11,我可以确认问题也发生在真实设备上。
问题:为什么我SKTileMapNode
在离机时消失了(即使禁用了剔除)?如何保持此节点可见?
谢谢!
解决方案
看来我已经解决了这个问题。
我通过 SwiftUI 呈现我的场景SpriteView
,我已将其配置为允许背景透明,如下所示:
SpriteView(scene: theScene, options: [.allowsTransparency])
删除透明度选项解决了这个问题:
SpriteView(scene: theScene)
现在,为什么会这样呢?我不知道。
推荐阅读
- php - Laravel 队列的 `retry_after` 和 `timeout` 选项有什么区别?
- flutter - 修剪时ffmpeg不同的持续时间
- android - 我有更多的芯片,我已经添加到数组中,但是如何显示呢?
- neo4j - neo4j 将列表中项目的索引分配给数学项目
- php - MPDF如何使用alpha透明?
- angularjs - 记录接口的属性是一个类而不是类的实例
- python - 如何在 Python 中使用堆栈方法编写欧几里德算法?
- time-complexity - 如何获得这样一个奇怪代码的时间复杂度?
- python - BaseHash 'str' 对象没有属性 'base'
- assembly - 寄存器是算术计算操作数的唯一来源吗?