SpriteKit:Time Profiler的可疑结果

时间:2014-07-07 15:48:55

标签: ios xcode5 sprite-kit

我有一个带有太空飞船的SpriteKit游戏,它会在接触侧壁时使用粒子发射器。我的SpaceShip对象具有代码,只要它在侧面刮擦,就可以从太空船的侧面添加或移除发射器。当通过Time Profiler仪器运行时,结果表明" removeFromParent"在stopScrape方法中调用占用总应用时间的40%。此外,它说该方法是" removeFromParent"我插入的NSLogs显示每次调用scrape方法时只调用一次,在该方法中调用了几十次。我不确定这只是Time Profiler的一个问题,还是我的代码中存在问题。它像我正在做的那样接缝是非常直接的,但是这种方法一直被时间分析器调出。我还尝试使用从Ship中删除子发射器而不是让发射器移除其父级,但它仍然在Profiler中显示为性能问题。提前感谢任何人提供的任何见解。

-(void) scrape: (ScrapeDirection) scrapeDirection
{

    if(!self.isScraping)
    {
        [self runAction: self.repeatScrapeSoundAction withKey:@"scrape"];
        NSLog(@"start");

        if((scrapeDirection & ScrapeRight) !=0)
        {
            self.scrapeParticle.position = CGPointMake(40, -70);
        } else
        {
            self.scrapeParticle.position = CGPointMake(-40, -70);
        }
        [self.spaceShip addChild: self.scrapeParticle];
        self.isScraping=YES;
    }

}

-(void) stopScrape
{
    if(self.isScraping==YES)
    {
        NSLog(@"STOP");
        self.isScraping=NO;
        [self removeActionForKey:@"scrape"];
        [self.scrapeParticle removeFromParent];// removeChildrenInArray: [[NSArray alloc] initWithObjects: self.scrapeParticle, nil]];
    }

}

我添加了两个我在分析器中看到的快照。在第一个中,removeFromParent说它在这个线程上被称为14X,而在其他线程上也被称为14X,而记录器显示它在测试期间实际上只发生了2-3次。最终结果是removeFromParent调用是此方法使用时间的98%。

Timer Profile http://oi59.tinypic.com/22apg0.jpg

在这次测试中,stopScrape方法只有17%的时间,但是,因为我只擦了2-3次墙,我预计这会小得多。我在这个应用程序中添加/删除了许多精灵和发射器,但只有stopScrape调用似乎被标记为时间密集。

Timer Profile2 http://oi61.tinypic.com/2dr6t1l.jpg

1 个答案:

答案 0 :(得分:1)

幕后的粒子发射器使用节点来创建效果,因此不断添加和删除它们。

如果您为showsNodesCount设置了YESSKView,则会看到我在说什么。当发射器处于活动状态时,节点数将上下波动。