我正在构建一个具有肖像画廊(如博物馆)的应用程序,我的角色从左到右从左到左走过它们。我的肖像(图像)都是 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];
}
}
}
}
}