마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

SurfaceView 사용하여 게임 만드는중..성능관련..

0 추천

SurfaceView를 사용하여 게임을 제작중입니다.

대략적인 구조는 Activity에서 SurfaceView를 add하고, 쓰레드를 생성하여 Run()메소드에서 게임루프를 돌립니다.

근데 이미지 한장을 올려놓고 별다른 계산 없이 드로우만 하는데 갤럭시2에서 60프레임 정도 밖에 안나오네요..

이미지 대략 15장 정도 드로우시키고 이런저런 계산 처리 과정 넣고 하니 갤2에서는 40프레임정도, 노트에서는 12프레임 나오네요..ㅡㅡ;;

어느 부분을 최적화 해야 할지 감이 안오네요...

 

쓰레드의 Run()메소드는 

 

@Override

public void run() {

 

    while (onProgram)

    {

       runOnUpdate();

       runOnRender();

    }

 

    Remove();

}

이런식이고.
runOnUpdate()는 이런저런 연산.<-이부분은 아무것도 안한다고 가정합니다.
runOnRender()부분은 드로우 부분입니다.
 
private void runOnRender() {

    try

    {

         mCanvas = mSurfaceHolder.lockCanvas(null);

 

        synchronized ( mSurfaceHolder )

        {

              Render();

         }

    }

    finally

    {

        if ( mCanvas != null )

             mSurfaceHolder.unlockCanvasAndPost(mCanvas);

     }

}

 
저게 다입니다. Render()함수에서 실제 비트맵 이미지를 드로우 하구요.
별도의 프레임 제한은 뺀 상태입니다.
 
흠...난감하네요. 설마 실제 폰의 성능이 떨어지는 걸까요?
다른 게임들은 프레임 잘 나오는지 궁금하네요...

 

바람처럼살리라 (370 포인트) 님이 2013년 2월 21일 질문

2개의 답변

0 추천
혹시 draw쪽 함수에서 이미지를 로드하는건 아닌가요...

그리고 60프레임 이상 나오지 않는다고 실망하실 필욘 없습니다

40프레임정도면 충분합니다

사람눈으로 구분못해요
수상한i (8,050 포인트) 님이 2013년 2월 24일 답변
수상한아이님 답변 감사드립니다. 40프레임 정도면 저도 고민안하죠~ㅎㅎ
문제는 노트에서의 12프레임인데..게임 전체를 구성하려면 이미지 15장 정도로는 어림도 없으니 훨씬 더 떨어질걸 두려워하고 있죠..ㅎ
0 추천
뭐 40프레임이면 오히려 프레임을 줄여야 할 상황이지만....

노트1에서 12프레임이라..... 조금 낮네요....

아무리그래도 20 프레임은 나와줘야 하는데....

서페를 이용한 게임 구현은 하나하나 전부 손을 대줘야 하는 불편 함이 있죠....

그래도 꽤 많은 계산을 해도 12프레임까지 덜어지지는 않는데.... 좀더 최적화가 필요하다고 봅니다.
ThisPlus (46,920 포인트) 님이 2013년 2월 25일 답변
짜이뚱님 답변 감사드립니다. 그렇지 않아도 최적화를 할까 openGL로 갈아탈까 생각중입니다. 시간이 한정되어있기에...지금은 openGL쪽으로 갈아타는 방향으로 보고있습니다. 라이브러리를 하나 짜고 있는데 3d로 가기도 편하고 성능도 올라간다면 이시점에서 엎어버리는게 나은듯 싶어서요..참고로 노트랑 갤2HD등 해상도큰데에서 프레임이 쭉쭉 떨어지네요..openGL로 갈아타면서 최적화부분도 고려해서 한꺼번에 수정할 생각입니다.
...