3년 전인가 2년 전인가 만든 2D 비행 슈팅 게임인데요
요즘폰에서 안돌아간다고 고쳐달라고 댓글이 자꾸 달려서
업데이트를 한번 해볼려고 다시 보고있는데
몇 달째 해결방법을 못찾고있습니다..
갤2 (800x480)에서는 프레임레이트60까지 나오면서 잘 돌아가는데
갤4 (1920x1080) 하고 G3캣식스(2400?x1440)에서는
게임 킨 후에 뜨는 메인화면까지는 나오는데
게임 플레이 화면에 들어가면 OutOfMemory Exception 뜨면서 강제 종료되버려서
그림들 불러올때 720p 이상일경우 width x 720(비율 유지)으로 불러오게 했더니 강제종료는 안되는데
게임 플레이 화면에서의 프레임레이트가 8~15정도 까지 떨어집니다(도저히 플레이 불가능한 수준으로 느려짐)
원래 android.graphics.Canvas에 android.graphics.Bitmap 이미지들을
현재 기기의 해상도 사이즈에 맞게 비트맵을 풀스크린으로 리사이징해서
canvas.drawBitmap(image, x, y, null)을 이용해서 그렸던거를
고해상도 폰에 맞게 리사이징해버려서 메모리부족예외로 강제종료 되는 것으로 판단하여
비트맵은 세로 720pixel이상 키우지 않게 놔두고
canvas.scale(scaleRateWidth, scaleRateHeight, 0, 0)를 사용해서
캔버스 크기를 바꿔서 그렸더니 익셉션이 사라지고 강제종료도 안되지만 느리게 실행이 됩니다..
canvas.scale부분 한 줄을 지우고 실행해보면
위 그림처럼 그려지고 이 상태에서는 빠르게 잘 실행됩니다. 그림크기가 작음..(플레이 화면 크기가 작음)
세 줄 요약
1. 해상도가 제각각인 안드로이드 기기들에 맞게 그림 크기를 리사이징하도록 구현함
2. 매우 높은 해상도의 스마트폰들이 나오면서 그림 크기가 너무 커져 아웃오브 메모리 익셉션 발생
3. 그림크기는 놔두고 캔버스를 키웠더니 에러는 안나지만 느려짐
어떤 부분에서 수정을 해야할까요?
왜 느려지는건지;; 모르겠고..
원인을 모르니 질문을 어떻게 드려야할지도 모르겠어서 이 글도 한 시간 넘게 썼다가 고쳤다가..