프레임 속도의 속도가 필요없는 간단한 안드로이드 게임을 만들고 있습니다. 간단한 체스 게임으로 생각하십시오.캔버스가 간단한 안드로이드 게임에서 UI 지연을 유발합니다.
내가 된 onDraw를 사용하여 전체 게임() 그릴 사용자 지정보기, 만든:
프로토 타입 단계에서 현재public class GameView extends View {
public GameView (Context context, AttributeSet attrs) {
super(context, attrs);
...
}
protected void onDraw(Canvas canvas) {
...
}
}
, 난 그냥 그리기있어 선, 원, 직사각형, 그러나되지 않은 비트 맵 .
플레이어가 invalidate()
(플레이어 당 1 프레임 이동)을 사용하여 이동할 때마다 그려집니다.
보기가 이미 그려져 있으면 사용자 인터페이스 나 예를 들어 사용자에게 대화 상자 나 토스트를 표시 할 때 프레임 속도가 떨어지는 것을 느낄 수 있습니다. 뷰가 이미 그려지는 순간이 아니라 드로잉하는 순간입니다.
이상한가요? 보기가 이미 그려져 있기 때문에 사용자 인터페이스에서 이런 종류의 대기 시간을 알 수있는 이유는 무엇입니까?
감사합니다. 나는 공식 문서를 읽었으며 다음과 같이 썼습니다. "체스 게임, 뱀 게임 또는 천천히 움직이는 다른 응용 프로그램의 경우 상당한 양의 처리 또는 프레임 속도가 필요하지 않은 응용 프로그램 인 경우 사용자 정의보기 구성 요소 만들기 "를 고려하십시오. 공식 문서가 SurfaceView 대신 사용자 정의보기를 제시하는 이유는 무엇입니까? SurfaceView 사용시 단점이 있습니까? – MScott
그래, SurfaceView 사용에 대한 몇 가지 단점이 있습니다. 다른 스레드를 사용하여 캔버스를 그리는 장점이 있지만 하드웨어 가속을 사용하면 이점을 얻을 수 없습니다. 이들은 이전에 토론 된 주제이며, 당신이 그것을 체크 아웃 할 것을 제안합니다. 정확한 답으로 제 대답을 확인하십시오. :) http://stackoverflow.com/a/15995353/1928275 – Firecat
OpenGL ES가 모든 솔루션 중에서 가장 좋은 솔루션이라고 생각하십니까? – MScott