2012-10-10 1 views
0

동시에 작업을 수행하고 게임 논리를 계속 진행하려고하지만 프로세스가 진행 중일 때 작업이 중단됩니다. 스레드를 사용하려고했지만 작동하지 못했습니다. 게임 로직을 처리 할 필요가 없을 때 스프라이트는 예상대로 움직이지만, 동작 중에는 일부 동작을해야 할 때 동작 시간 동안 동작이 중단됩니다. 작업이 종료되면 작업이 진행됩니다. 내가 뭘 잘못하고 있니?진행중인 작업에 의해 cocos2d-iphone 작업이 중단되었습니다.

다음과 같이 선택기를 호출합니다. - 선택기가 동작을 시작합니다.

[NSThread detachNewThreadSelector:@selector(moveSprite:) 
         toTarget:self 
         withObject:[NSDictionary dictionaryWithObjectsAndKeys: 
                sprite, @"sprite", 
                [NSValue valueWithCGPoint:pos], @"pos", 
                nil]]; 


-(void) moveSprite: (NSDictionary*) parameters { 
    CCSprite *sprite = [parameters objectForKey:@"sprite"]; 
    CGPoint pos = [[parameters objectForKey:@"pos"] CGPointValue]; 
    id actionMove = [CCMoveTo actionWithDuration:0.4f position:pos]; 
    id actionMoveDone = [CCCallFuncND actionWithTarget:self selector:@selector(removeSprite:data:) data:(__bridge void*)sprite]; 
    [sprite runAction:[CCSequence actions:actionMove, actionMoveDone, nil]]; 
} 

작업이 끝나면 다음과 같은 방법으로 스프라이트를 제거합니다.

+0

또한 게임 논리에서 블록의 원인이되는 부분을 표시해야합니다. 게임을 렌더링하는 것을 멈추게하는 것은 매우 강렬해야합니다. –

+0

나는 받아 들여야 할 이유를 몰랐다. 경고 해 주셔서 고맙습니다. – beyax

답변

0

는 첫째,가 이해되지 않는다 비용이 많이 드는 작업없이 작품을 좋아 알고 있기 때문에, 당신이 찾고되어야 하는지를되지 않도록, 스레드를 사용해야 하나

별도의 스레드에서 작업을 작성하십시오. 조치가 노드에 추가되고 해당 조치와 함께 노드가 기본 스레드에서 갱신됩니다.

스레딩이 인 경우에만 만 사용하면 장치에 두 개 이상의 CPU 코어가있는 경우 도움이됩니다. 대용량 작업을 수행하는 별도의 스레드를 실행하는 단일 코어 장치 (iPhone 4 또는 이전 버전, iPod Touch 4 또는 이전 버전, iPad 1)에서는 주 스레드를 중지하지 않으면 속도가 느려집니다.

게임 로직이 실제로 무거 우면 은 화면이 업데이트되지 않도록 작업을 최적화해야합니다. 여러 프레임에 걸쳐 계산을 퍼뜨릴 수도 있고, 최적화 할 수 있는지를 알기 위해 프로필을 작성하거나, 무차별 접근 방식을 사용하는 경우 더 똑똑하고 덜 간단하지만 빠른 알고리즘을 연구 할 수 있습니다.

+0

나는 mutable 배열에서 iterating을하고 객체의 속성을 사용하여 비교를하고 또한 새로운 가변 배열을 만들고있다. 배열 작업이 메인 스레드를 멈춘 것 같아요. 나는 작업을 최적화하려고 노력할 것이다. – beyax

0

주 스레드에서 Cocos2d가 실행 중이므로 과중한 작업도 실행되므로 겪고있는 현상이 매우 정상입니다. 당신은 그쪽으로 작업을 밝게하거나 CCActions 코드는 당신이

+0

사실 나는 액션을 초기화하는 메소드를위한 쓰레드를 만들 때 액션이 메인 쓰레드와 병렬로 동작하고 액션은 메인 쓰레드에 의해 인터럽트되지 않을 것이라고 생각했다. 다른 작업에 스레드를 사용해야합니까? – beyax

+0

스레드를 피하고 값 비싼 기능을 먼저 가볍게 만드는 것이 좋습니다. – yannicuLar