문제

에서 일하고 있어요 작은 안드로이드 게임을 처리하는 캔버스에 그리기 작동하는 스레드가 있습니다.게임이 끝난 후에 이 thread 시작해야 하는 다음 활동,하지만 어떻게든 UI 실 얻을 것으로 보인다 차단하여 시작하는 새로운 기능.

이것은 나의 주요 게임-Loop:

while(true)
    // Perform Ticks until the player makes a mistake
    c = _surfaceHolder.lockCanvas();
    if ((toDraw = rh.performTick()) == null) {
         lose();
         break;
     }
     _surfaceHolder.unlockCanvasAndPost(draw(toDraw,c));
}

기능 performTick() 프로세스 게임 논리와 반환 null 면 게임이 종료됩니다. draw()는 않습니다.두 기능은 작업한 문제입 lose(), 는 아무것도하지 않을 시작하는 새로운 행동:

    protected void lose() {
        Handler handler = new Handler(Looper.getMainLooper());
        handler.post(new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent(_context, MainMenu.class);
                _context.startActivity(intent);
            }
        });
    }

게임이 끝날 때,새로운 Activiy(MainMenu)일반적으로 시작하지만에 반응하지 않는 모든 터치합니다.없는 콘텐츠 및 예외가 발생.더 악화 lose()정상 일할 때 그 전에 호출 메인 루프를 시작합니다.

나는 이 일에 대한 일 now.나를 시작하려고 시도 활동에서 직접 작업 스레드(를 사용하지 않고 Handlerlose() 다)및 인터넷 검색을 위한 시간 아무것도 할 수 없습니다.그것처럼 보인다는 UI 스레드가 어떻게든 차단 또는 잡은 무한 루프에서,그리고 나는 아이디어가 있지 않을 해결하는 방법이다.

모든 디버깅에 Nexus4 장치입니다.

Btw: MainMenu.onCreate() 작품은 정상적인 시작할 때 다른 방법이다.

도와주세요, MA3o

도움이 되었습니까?

해결책

당신의 잠금을 해제하지 않을 경우 캔버스의 경우 문은 사실이다.휴식을 얻을 것이다 당신의 나면서 떠나,캔버스에 잠겨 있습니다.

while(true)
    // Perform Ticks until the player makes a mistake
    c = _surfaceHolder.lockCanvas();
    if ((toDraw = rh.performTick()) == null) {
         lose();
         break;
     }

     // this line won't be executed whether the if statement above is true
     _surfaceHolder.unlockCanvasAndPost(draw(toDraw,c));
}

의 잠금을 해제해야 내부 if 도(전 또는 후에는 잃()).

다른 팁

대신하는 경우 While(true)While(myVar)myVar 이는 부울 값이 true 이면 게임이 실행해야 한다고 거짓 호출할 때 lose() 귀하의 경우에 당신은 그리는 계속하지만 당신은 필요하지 않았다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top