0

我正在构建一个具有肖像画廊(如博物馆)的应用程序,我的角色从左到右从左到左走过它们。我的肖像(图像)都是 2048x2048。我还没有减小它们的尺寸,因为我想确保它们可以用于 iPad 版本。我知道它们的大尺寸是一个问题,因为当我尝试一次加载所有它们时它会崩溃(即使只有 10 张图像也需要很长时间才能启动)。

话虽如此,我真正的问题是尝试创建一种有效的方法来根据需要添加/删除它们(精灵)。我想出了一些可行的方法,但这显然不是最好的方法。

我希望有人可以提出一种更有效的方法。

这是我的代码。您可以假设另一种方法负责将图像加载到一个名为 framedSprites 的可变数组中(由于大小/崩溃,我一次只能加载 10 个)。每次屏幕位置发生变化(通过 TouchMoved 滑动)时,都会调用以下方法 (checkPosition)。正如我所看到的,我将不得不为数组中的每个图像/肖像创建类似的语句(非常低效且耗时)......

-(void)checkPosition {

CGSize winSize = [CCDirector sharedDirector].winSize;

for (CCSprite *sprite in framedSprites) {

    if (sprite.tag == 2) {

        if ((sprite.position.x > 2000.0f)&&(sprite.position.x < 2010.0f)) {

            CCSprite *portrait = (CCSprite *)[_backgroundNode getChildByTag:0];

            if (portrait.tag == 0) {

                NSLog(@"Removing a Portrait Left 2 Places From This One");

                 [_backgroundNode removeChildByTag:0 cleanup:YES];

            }
        }

        if ((sprite.position.x > 1980.0f)&&(sprite.position.x < 1990.0f)) {

            CCSprite *portrait = (CCSprite *)[_backgroundNode getChildByTag:0];

            if (portrait == nil) {

                CCSprite * framedSprite = (CCSprite *)[framedSprites objectAtIndex:0];

                NSLog(@"Adding a Portrait Left, 2 Places From This One");

                framedSprite.position = ccp(600,winSize.height/2);  //figuring these positions is also not efficient and time consuming

                [_backgroundNode addChild:framedSprite z:0 parallaxRatio:ccp(0.4f,0.5f) positionOffset:framedSprite.position];

            }
        } 
    }
}   
}
4

1 回答 1

0

您应该只需要一次加载 3 张图像以允许在任一方向滚动(假设您也不允许在 y 方向移动)。显示的那个,任一侧作为缓冲区,然后根据需要延迟加载和替换。

如果您不需要一次查看整个图像,您还可以考虑使用 Tilen 等免费工具将其切割成图块 (http://itunes.apple.com/gb/app/tilen/id409199185?mt=12)然后根据需要加载瓷砖。

于 2012-08-07T17:57:08.177 回答