2017-02-11 1 views
0

프레임 속도의 속도가 필요없는 간단한 안드로이드 게임을 만들고 있습니다. 간단한 체스 게임으로 생각하십시오.캔버스가 간단한 안드로이드 게임에서 UI 지연을 유발합니다.

내가 된 onDraw를 사용하여 전체 게임() 그릴 사용자 지정보기, 만든

:

프로토 타입 단계에서 현재
public class GameView extends View { 
    public GameView (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     ... 
    } 
    protected void onDraw(Canvas canvas) { 
     ... 
    } 
} 

, 난 그냥 그리기있어 선, 원, 직사각형, 그러나되지 않은 비트 맵 .

플레이어가 invalidate() (플레이어 당 1 프레임 이동)을 사용하여 이동할 때마다 그려집니다.

보기가 이미 그려져 있으면 사용자 인터페이스 나 예를 들어 사용자에게 대화 상자 나 토스트를 표시 할 때 프레임 속도가 떨어지는 것을 느낄 수 있습니다. 뷰가 이미 그려지는 순간이 아니라 드로잉하는 순간입니다.

이상한가요? 보기가 이미 그려져 있기 때문에 사용자 인터페이스에서 이런 종류의 대기 시간을 알 수있는 이유는 무엇입니까?

답변

0

나는 당신이 찾고있는 것일 수도있는 SurfaceView을 봐야한다고 생각합니다.

보기는 모두 모든 사용자 상호 작용에도 사용되는 동일한 GUI 스레드에서 작성됩니다.

SurfaceView을 사용해야합니다. 실제로 캔버스에 그려지는 스레드를 사용합니다.

도 권장합니다. Difference between SurfaceView and View?

+0

감사합니다. 나는 공식 문서를 읽었으며 다음과 같이 썼습니다. "체스 게임, 뱀 게임 또는 천천히 움직이는 다른 응용 프로그램의 경우 상당한 양의 처리 또는 프레임 속도가 필요하지 않은 응용 프로그램 인 경우 사용자 정의보기 구성 요소 만들기 "를 고려하십시오. 공식 문서가 SurfaceView 대신 사용자 정의보기를 제시하는 이유는 무엇입니까? SurfaceView 사용시 단점이 있습니까? – MScott

+0

그래, SurfaceView 사용에 대한 몇 가지 단점이 있습니다. 다른 스레드를 사용하여 캔버스를 그리는 장점이 있지만 하드웨어 가속을 사용하면 이점을 얻을 수 없습니다. 이들은 이전에 토론 된 주제이며, 당신이 그것을 체크 아웃 할 것을 제안합니다. 정확한 답으로 제 대답을 확인하십시오. :) http://stackoverflow.com/a/15995353/1928275 – Firecat

+1

OpenGL ES가 모든 솔루션 중에서 가장 좋은 솔루션이라고 생각하십니까? – MScott

관련 문제