我正在构建一个拥有肖像画廊(如博物馆)的应用程序,我的角色从左到右走过它们。我的肖像(图片)都是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];
}
}
}
}
}
答案 0 :(得分:0)
您应该只需要同时加载3个图像以允许向任一方向滚动(假设您不允许在y方向上移动)。显示一个,一个作为缓冲区,然后是延迟加载并根据需要进行替换。
如果您不需要一次看到整个图像,您还可以考虑使用像Tilen这样的免费工具将其切割成瓷砖(http://itunes.apple.com/gb/app/tilen/id409199185?mt = 12)然后根据需要加载图块。