2013-01-10 2 views
1

내 게임이 처음 실행될 때 텍스처가 올바르게 표시되면 종료 한 다음 다시 실행하고 흰색 화면 만 표시합니다. 일시 중지 또는 파괴시 정리 작업과 같은 텍스처로드 및 안드로이드 활동 라이프 사이클에 몇 가지 문제가 있다고 생각합니다. 재미있는 점은 화면을 실행할 때만 흰색 화면이 표시되지만 디버깅 할 때 완벽하게 표시된다는 것입니다. 조언을 좀주세요. 고마워요. 지금까지두 번째로 실행하면 Android OpenGL 앱에 흰색 화면이 표시됩니다.

+0

onPause 및 onResume 메서드를 표시하십시오. –

+0

@SimonSchubert 실제로 이러한 콜백을 구현하지 않았습니다. 그것이 내 문제의 주요 원인입니까? – Terry

답변

0

내 경험 :

  • 두 가지의 힘에 텍스처를 생성하고 확장 있는지 확인하고 그릴 때 오른쪽 비율에 클립. 당신이 ALPHA_8 (텍스트 렌더링) 당신이 GL11 컨텍스트 캐스트를 피 OnSurfaceDraw
  • 호출하기 전에 당신이 OnSurfaceCreated에서 할 수있는 어떤
  • 할 일을 할 수있을 때
  • 는 RBGA_8888에 충실하지 마십시오. 예를 들어 glColor4ub 이 작동하지만 작동하지 않는 경우도 있습니다.
  • 각 구성 요소에 대한 사용 가능 및 사용 불능 통화를 조정하여 을 씬 그래프로 불러 오십시오.
  • 는 NIO 버퍼
  • 사용 DrawElements을 미리 할당하지만, 많은 장치에서 하나 개의 정점
  • 테스트의 가장 간단한 형태에 대한 당신이 할 수있다. 예 : 에뮬레이터에 정착하지 마세요. 2 개의 힘이 아닌 것은 에뮬레이터에서 작동하지만 전화기에서는 작동하지 않습니다.
  • 그런 다음 주문형 도면을 사용할 수 있습니다.
  • onTouchEvent 호출에서 대기 시간을 20ms 으로 설정하고 onDraw에 알림을 보내어 처리해야하는 모션 이벤트의 홍수를 줄이십시오. onTouchEven을 건너 뛰고 에 더 낮은 호출을 사용하여 일부주기를 절약 할 수 있습니다.
  • 가능한 한 많이 텍스처 아트라스를 사용하십시오. 점수 및 텍스트 그리기 또는 애니메이션
  • 멋진 렌더링 옵션 (DITHER_TEST 등 ... 사용 안 함) 질감에 대한 사실적인 렌더링을 원한다면.
  • 2D로 그리는 경우 DEPTH_TEST를 사용하지 않도록 설정하십시오.
  • 텍스처가 완료되면 Bitmap.recycle() 호출을 잊지 마십시오.
  • 렌더링 루틴에서 개체 생성 파괴 (PointF Rect)를 피하십시오. GC 통화로 인해 프레임 속도가 느려집니다.
  • 텍스처를 광범위하게 미리로드하십시오. 마지막 순간에 의 그림을 그릴 때까지 기다리지 말고 텍스처를 바인딩하십시오. 그렇게하면 지연이 눈에 띄게됩니다. 앱 시작 시간이 더 좋습니다.
0

문제를 해결하지 못한다면 onPause 및 onResume 메서드를 사용해야합니다. 제안을 추가 할 것입니다. 나는 몇 달 전에 같은 문제가 있었다.

@Override 
protected void onPause() { 
    super.onPause(); 

    mGLView.onPause(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 

    mGLView.onResume(); 
} 

확인 어쩌면 : onSurfaceCreated에서

public void onSurfaceChanged(GL10 gl, int w, int h) { 
    gl.glViewport(0, 0, w, h); 
} 
+0

죄송합니다. 시도했지만 작동하지 않았습니다. 그러나 당신의 도움에 감사드립니다 : D – Terry

0

당신이 다시로드하는 텍스처() 또는 다른 장소에서? 당신은 onSurfaceCreated()에 그 물건을 갖고 싶어합니다.

관련 문제