2012-06-01 3 views
0

일부 물건을로드하는 데 몇 초가 걸리는 알고리즘이 있습니다. 먼저 실제로드가 시작되기 전에 "로드 중"이라고 말하기 위해 라벨에 문자열을 설정하고 싶습니다. 이것은 모두 같은 레이어 내에 있습니다. 이것은 장면 사이를 전환하지 않습니다. 나는이 있고,Cocos2D scheduleUpdate를 사용하여로드 지연

-(void)startLoading{ 

[self unscheduleAllSelectors];//just in case the update is already scheduled 

[self.loadingLabel setString:@"Loading...."]; 

[self scheduleUpdate]; 

} 

을 다음 :

-(void)update:(ccTime)delta{ 
[self unscheduleUpdate]; 
[self beginLoading];//another method that loads all the stuff 

} 

나의 이해는 나의 방법 다음 프레임까지 실행되지해야한다는 것입니다

나는 단순히이 작업을 수행 할 수 있다고 생각. 따라서 내 레이블이 올바르게 업데이트되어야합니다. 그러나 이것은 일어나지 않습니다. 로드가 시작되기 전에 모든 애셋이로드되고 내 라벨이 업데이트되지 않습니다.

단계가 빠졌습니까?

+0

장면/레이어의 init 함수에서 startLoading을 호출하고 있습니까? 이 스레드는 해결책을 가지고있는 것처럼 보입니다 ... http://www.cocos2d-iphone.org/forum/topic/15998 – badgerr

+0

그 스레드는 다른 문제점을 나타냅니다. 내 업데이트가 실행 중이지만 하나의 프레임을 기다리지 않고 있거나 새 프레임이 시작되기 전에 이전 프레임이 완료되지 않은 경우 가능하지 않습니다. 나는 init 메소드를 호출하지 않는다. – johnbakers

답변

0

아무 것도 놓치지 마세요. 나는 이것을 막지 않고 이제는 이런 종류의 '지연된'작업 투석기를 사용합니다.

-(void) startLoading{ 
    _loadTicker=0; // an NSUInteger iVar declared in the .h 
    [self schedule:@selector(tickOffLoading:)]; 
} 

-(void) tickOffLoading:(ccTime) dt{ 

    _loadTicker++; 
    if(_loadTicker==1) { 
     [self.loadingLabel setString:@"Loading...."]; 
    } else { 
     [self unschedule:@selector(tickOffLoading:)]; 
     [self beginLoading]; 
    } 
} 
+0

감사합니다. 당신과 나는 비슷한 생각을 가지고있었습니다. 나는 보통의'update' 메소드를 사용하여 끝났지 만 프레임 카운터 ivar도 사용하고있다. – johnbakers

+0

@andrewx : lol, 놀랍지 않게 비슷한 문제가 비슷한 해결책을 가져올 것이다. 이것은 1,2,3 등으로 티커 체크를 캐스케이드 할 수 있기 때문에 백그라운드 작업에서 로딩하기위한 단계를 멋지게 설정합니다 ... – YvesLeBorg

+0

나는 초기에 예상대로 작동하지 않는 이유가 여전히 궁금합니다. 나는 업데이 트가 동일한 "프레임"에서 실행되거나 루프가 처음에 실행될 때 실행되어야한다고 생각합니다. – johnbakers

관련 문제