【问题标题】:How to draw a background fast in cocos2d?cocos2d如何快速绘制背景?
【发布时间】:2010-10-10 10:20:34
【问题描述】:

我正在使用 cocos2d 在我的 iPad 上玩一个小游戏,我遇到了一些性能问题。我有一个 512x512 的图像平铺作为我的背景。这给了我大约 40fps 的 20 个精灵(在 CCSpriteBatchNode 中),背景代码是这样的:

CCSprite *background;
background = [CCSprite spriteWithFile:@"oak.png" rect : CGRectMake(0,
                                                                   0,
                                                                   size.width,
                                                                   size.height)];
background.position =  ccp( size.width /2 , size.height/2 );
        
ccTexParams params = {GL_LINEAR,GL_LINEAR,GL_REPEAT,GL_REPEAT};
[background.texture setTexParameters: &params];

如果我移除背景,我会得到稳定的 60fps。

我已尝试将图像转换为 PVRTC,但确实提供了额外的一两帧。我使用 1024x768 图像而不是平铺版本获得相同的帧速率。

因为我的背景将保持轴对齐、未缩放且通常是静态的。我认为应该有一种比普通CCSprite 更快的方法来绘制它?

【问题讨论】:

    标签: iphone objective-c performance ipad cocos2d-iphone


    【解决方案1】:

    原来 cocos2d 以神秘的方式移动。将背景添加到否则为空的包装 CCSprite 可使帧速率恢复到 60:

    CCSprite *spback = [(CCSprite*)[CCSprite alloc] init];
    [self addChild:spback];
    
    CCSprite *sp = [CCSprite spriteWithFile:@"Background.png"];
    sp.position = ccp(1024/2, 768/2);
    [spback addChild:sp];
    

    感谢yaoligang on the cocos2d forums.

    【讨论】:

    • 不要忘记自动释放包装精灵。
    • 硬编码大小的坏习惯,应该使用 [[sprite texture] contentSize]
    【解决方案2】:

    首先,您是在 iPad 还是模拟器上运行它?那里通常存在很大的性能差异。在查看了人们有类似问题的论坛之后,我会尝试将整个 1024x768 图像拆分为 2 个 512x768 的图像。希望对您有所帮助。

    【讨论】:

    • 这一切都在真正的硬件上。我最初的印象是拥有更少的精灵(带有平铺的 POT 纹理)会更快,但是当我正在研究这个时,似乎情况并非如此。
    【解决方案3】:

    我自己在 1024x768 背景下进行了尝试,即使在使用 iPad 进行调试时也能获得大约 60fps。或许要确保您的图像没有额外的通道或 alpha?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多