ios - SpriteKit : Questionable results from Time Profiler

标签 ios xcode5 sprite-kit

我有一个 SpriteKit 游戏,其中有一艘 spaceship ,当它接触到侧壁时会使用粒子发射器。我的 SpaceShip 对象具有代码,可以在飞船侧面抓取时在飞船侧面添加或移除发射器。通过 Time Profiler Instrument 运行时,结果表明 stopScrape 方法中的“removeFromParent”调用占用了总应用程序时间的 40%。此外,它说该方法是“removeFromParent”,在该方法中调用了数十次,而我插入的 NSLog 显示每次调用 scrape 方法时只调用一次。我不确定这是否只是 Time Profiler 的问题,或者它们是否是我的代码中的问题。看起来我正在做的事情非常简单,但 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

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

Timer Profile2

最佳答案

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

如果为您的 SKViewshowsNodesCount 设置为 YES,您就会明白我在说什么。当发射器处于事件状态时,节点数会上下波动。

关于ios - SpriteKit : Questionable results from Time Profiler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24614650/

相关文章:

iphone - 旋转图像突然翻转

ios - 如何在界面生成器中从 Storyboard 场景实例化的 View Controller 上调用自定义初始化?

ios - Resize UIWebView on webViewDidFinishDownload 困境

ios - 在 Swift 中跨多个目标共享 Storyboard

ios - CoreData : error: (14) on device, 不在模拟器中

xcode5 - 升级到 Xcode 5 后将 Gitbox diff 工具链接到 FileMerge

ios - 为 iOS7 编译 libnet 1.1.7 时遇到问题

iphone - 使用 Sprite Kit 粒子的 iOS 烟花爆炸

sprite-kit - SKShader 创建视差背景

ios - 如何添加转换后消失的图像?