在SpriteKit中多次添加相同的精灵

时间:2013-10-26 18:12:22

标签: objective-c cocoa-touch nodes sprite-kit

我正在使用Sprite Kit构建简单游戏,其中级别由相同的矩形块构建。但是当我添加到许多块(即1000)时,游戏变得非常慢(FPS下降到20)。以下是我向场景添加块的方法:

-(void)drawLevel
{
    SKSpriteNode *shelf = [SKSpriteNode spriteNodeWithTexture:_initialLevel.earthBoxTexture];
    shelf.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:shelf.size];
    shelf.physicsBody.dynamic=NO;
    shelf.physicsBody.categoryBitMask = platformCategory;

    for (NSValue *positionValue in _initialLevel.boxPositions)
    {
        shelf.position = positionValue.CGPointValue;
        [_platformsNode addChild:[shelf copy]];
    }

    [_world addChild:_platformsNode];
}

_world是主要场景的孩子。我创建一次“架子”而不是复制它。我该怎么做才能获得好的FPS?

App已在iPhone 5上测试过。

2 个答案:

答案 0 :(得分:2)

如何不在物理机构中使用这么多精灵?

千分之一肯定是几百个,特别是如果它们都在屏幕上并且如果许多机构产生接触事件(即堆叠时)。虽然在这种情况下它们都是静态的,所以它们不应该生成联系事件。这仍然会留下很多精灵。

在所有或大多数节点上执行的任何代码都会使事情变得更糟。仅供参考,我在屏幕上绘制了大约400个精灵的应用程序,在滚动时更新它们并运行自定义游戏逻辑 - 这个应用程序在iPod touch 5G上几乎不能达到60 fps。

此外,请务必测试设备的性能。模拟器不能用于评估性能。

答案 1 :(得分:0)

我建议使用一个使用精灵表映射的系统,如果正确完成,可以节省大量资源。要搞定它有点棘手,但是精灵表的每个部分都可以设置为不同的对象,它们可以以不同的方式与你的精灵交互。祝你好运,如果你还在寻找解决这个问题的方法,我现在还在学习Tiled with SpriteKit,但这似乎很有希望。

http://www.raywenderlich.com/62049/sprite-kit-tutorial-make-platform-game-like-super-mario-brothers-part-1 - 教程解释使用Tiled with SpriteKit

http://www.mapeditor.org - 平铺网站