我正在创建一个带有平铺Map的SpriteKit游戏。每个平铺都是一个SKSprite节点。当我有大约800块瓷砖的时候,没有任何问题。但是如果我尝试将Map的大小增加到2000块左右,我的FPS就会从60变到20。屏幕上的平铺节点数不变(约80),只是屏幕外的节点数。有什么想法是什么可能导致这一点,或如何补救?
muk1a3rh1#
似乎没有定义节点的最大数量。这实际上取决于您的设备上可用的可用内存量。例如,考虑以下代码:
int NODE_LIMIT = 375000 .... for (int i = 0; i<NODE_LIMIT; i++) { SKNode *node = [SKNode node]; [self addChild:node]; }
我可以创建375000个节点在我的精灵工具包游戏。但是当我把这个数字增加到这个以上时,我的设备就会耗尽内存。设备上的可用内存量将因多种因素而异。正如评论中提到的,帧速率变慢的原因是物理模拟即使在屏幕上看不到的节点也会运行。要保持高帧速率,请删除不可见或不需要每帧都模拟的物理体。您可以通过添加精灵/物理实体,仅当它们在屏幕的可视部分时,并删除它们来实现这一点。
xwbd5t1u2#
Map图块不应放置在SKSpriteNode内。平铺贴图是一种特殊的工具,它允许在不使用大型节点数组的情况下创建背景。这样的数组可能会削弱游戏的性能。根据苹果开发者论坛上的非官方帖子,它支持多达30,400,000个瓷砖,没有性能问题。https://developer.apple.com/forums/thread/102601
2条答案
按热度按时间muk1a3rh1#
似乎没有定义节点的最大数量。这实际上取决于您的设备上可用的可用内存量。例如,考虑以下代码:
我可以创建375000个节点在我的精灵工具包游戏。但是当我把这个数字增加到这个以上时,我的设备就会耗尽内存。设备上的可用内存量将因多种因素而异。正如评论中提到的,帧速率变慢的原因是物理模拟即使在屏幕上看不到的节点也会运行。
要保持高帧速率,请删除不可见或不需要每帧都模拟的物理体。您可以通过添加精灵/物理实体,仅当它们在屏幕的可视部分时,并删除它们来实现这一点。
xwbd5t1u2#
Map图块不应放置在SKSpriteNode内。
平铺贴图是一种特殊的工具,它允许在不使用大型节点数组的情况下创建背景。这样的数组可能会削弱游戏的性能。
根据苹果开发者论坛上的非官方帖子,它支持多达30,400,000个瓷砖,没有性能问题。
https://developer.apple.com/forums/thread/102601