내 앱에 시작 로더를 구현하고 싶습니다. 그것은 다음과 같아야합니다 : 시작 화면 시작 후, 사용자는 간단한 animataion을 보게됩니다. 그 사이에 app preload 사운드 효과, 배경 음악, 스프라이트 이미지, 스프라이트 시트 등을 보게 될 것입니다. 현재 구현 :cocos2d-iphone 앱에서 부드러운 로더 구현
- (id)init {
if((self = [super init])) {
// Some other setup ...
CGRect rect;
rect = waveSprite.textureRect;
waveInitialTexRectOrigin = rect.origin;
rect.size.width = 91;
waveSprite.textureRect = rect;
assetFilenames = [[NSArray alloc] initWithObjects:
// images
@"background.png",
// spritesheets
@"sprites.plist",
// fonts
@"main.png",
// sound effects
@"button.wav",
nil];
assetCounter = 0;
[self loadAsset];
}
return self;
}
- (void)update:(ccTime)dt {
CGRect rect;
rect = waveSprite.textureRect;
rect.origin.x += dt*kLoaderWaveSpeed;
while (rect.origin.x > waveInitialTexRectOrigin.x + kLoaderWavePeriod) {
rect.origin.x -= kLoaderWavePeriod;
}
waveSprite.textureRect = rect;
}
#pragma mark Private
- (void)loadAsset {
// CCLOG(@"loadAsset");
NSString *filename = [assetFilenames objectAtIndex:assetCounter];
CCLOG(@"loading %@", filename);
NSString *ext = [filename pathExtension];
if ([ext doesMatchRegStringExp:@"[png|jpg]"]) {
[[CCTextureCache sharedTextureCache] addImage:filename];
} else if ([ext isEqualToString:@"plist"]) {
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:filename];
} else if ([ext doesMatchRegStringExp:@"[caf|wav|mp3]"]) {
[[SimpleAudioEngine sharedEngine] preloadEffect:filename];
}
assetCounter++;
if (assetCounter < [assetFilenames count]) {
[self performSelector:@selector(loadAsset) withObject:self afterDelay:0.1f];
} else {
[self performSelector:@selector(loadingComplete) withObject:self afterDelay:0.2];
}
하지만 애니메이션이 갑작 스럽습니다.
UPD 이미
[self performSelectorInBackground: withObject:]
을 시도했지만 작동하지 않았다 (첫 번째 자산을로드에 걸려). 어쩌면 나는이 방향으로 나아가 야한다.
UPD2 부드럽고 갑작스럽지 않고 지연 및 깜박임이 없습니다. fps는 중요하지 않습니다. 20 fps 꽤 OK
"부드럽게"를 정의하십시오. 여러 스레드를 사용하면 다른 CPU 코어가 자산을로드하는 동안 60fps로 애니메이션을 만들 수 있습니다. 하지만 단일 코어 CPU 장치에서는 20fps 이상을 얻지 못할 수도 있습니다. – LearnCocos2D
정의 됨, 업데이트 –
@ LearnCocos2D를 참조하십시오. 그러면 다른 스레드에서 텍스처를 다른 다음 메인으로 가져올 수 있습니까? –