我有一个随机迷宫发生器,它开始构建小型迷宫,然后进入大规模的水平。 “C”是收藏品,“T”是瓷砖。 “P”是玩家的起始位置。我在下面添加了一个示例平铺图。
性能问题不是我在这里有一个小的6x12模式;例如,当我有一个20x20模式时,它会显示出来。
每个字符都是一个图块,每个图块都有自己的SKPhysicsBody
。瓷砖不是方形的,它们是复杂的多边形,并且瓷砖彼此不会相互接触。
“C”需要能够一次删除一个,并且“T”对于关卡是永久性的并且不移动。此外,迷宫一次只显示6x4个区块,并将背景移动到以玩家为中心的视图。
我已经尝试制作T和C的矩形,这大大提高了性能(但仍然比预期慢)虽然用户不会关心这一点,但是瓷砖的形状太不同了。
专业人士是否有任何表现技巧可以解决这个问题?
TTTTTT
TCTTCT
TCCCCT
TTCTCT
TCCTCT
TTCCTT
TTTCTT
TTCCCT
TCCTCT
TCTTCT
TTCCCT
TTPTTT
答案 0 :(得分:1)
瓷砖不是方形的,它们是复杂的多边形
我认为这是你的问题。此外,如果您的身体是动态的,将它们设置为静态将大大提高性能。您也可以尝试pooling。请注意,模拟器上的性能远低于真实设备上的性能。
答案 1 :(得分:1)
你使用什么样的碰撞方法?
SpriteKit提供了几种定义SKPhysicsBody形状的可能性。最佳性能提供矩形或圆形:
myPhysicsBody = SKPhysicsBody(rectangleOfSize: mySprite.size)
您还可以定义更复杂的形状,如三角形,其性能更差。
使用纹理(SpriteKit将使用所有非透明像素自行检测形状)具有最差的性能:
myPhysicsBody = SKPhysicsBody(texture: mySprite.texture, size: mySprite.size)
激活' usesPreciseCollisionDetection'也将对您的表现产生负面影响。