2016-09-18 2 views
1

내가 (하지만 많은 수의 기본 추가) 안드로이드에 프로그램으로 시작하고 지속적으로 수학을 수행하고 빠르게 변화하는 숫자를 표시하는 게임을 만드는거야Android 수학을 반복/반복하는 가장 빠르고 가장 적절한 방법은 무엇입니까?

버튼을 누른 상태에서 내가 .postDelayed() 일한

,하지만 난 느낌 이렇게하는 것이 최선이거나 가장 효율적인 방법은 아닙니다. 나는 또한 가장 빠른 권장 속도가 반복되는 것에 대해 무엇을 알고 싶습니까? 이 같은

내 버튼의 역할 :

buttonAdd.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch(event.getAction()){ 
       case MotionEvent.ACTION_DOWN: 
        myMethod(); 
        buttonAdd.postDelayed(myMethodRun, delay); 
        break; 
       case MotionEvent.ACTION_UP: 
        buttonAdd.removeCallbacks(myMethodRun); 
        break; 
      } 
      return true; 
     } 
    }); 

    Runnable myMethodRun = new Runnable() { 
     @Override 
     public void run() { 
      myMethod(); 
      buttonAdd.postDelayed(this, delay); 
     } 
    }; 
난 그냥 postDelayed()

body.postDelayed(runForever, delayTime); 

Runnable runForever = new Runnable() { 
     @Override 
     public void run() { 
      runForever(); 
      buttonAdd.postDelayed(this, delay); 
     } 
    }; 

를 만들기 위해 루트 뷰를 사용하여 같은 일을하고 생각하고 있었는데

이 일의 좋은 방법 while(true)인가 ? 나는 모든 것을 과부하하고 싶지 않다.

이것을하는 방법인가? 또는 UI 스레드를 너무 많이 사용합니까? 분명히, 나는 아직도 약간 새로운 사람이다. 저는 방법을 영원히 반복하고 싶습니다. 가장 빠른 지연 시간이 무엇인지 알고 싶습니다.

답변

1

게임의 경우 중요한 것은 사용자 경험이며, 주요 구성 요소는 프레임 수입니다. 초당 30 프레임과 같이 적절한 프레임 수를 유지하면 사용자는 게임의 모든 전환을 매끄럽게 인식합니다. 원할 경우 충분히 부드럽습니다. 초당 60 프레임과 같이 높은 fps로 이동하면 게임의 느낌이 더 좋아질 수 있지만 모바일 장치의 추가 전력 소비는 그다지 가치가 없습니다. (현재, 60fps는 고급 그래픽 카드가 장착 된 콘솔 또는 데스크탑 PC와 같은 하이 엔드 하드웨어에서만 실행됩니다.)

따라서 초당 30 프레임을 촬영하면 33 밀리 초마다 한 번만 프레임을 렌더링하면됩니다. 계산을 수행하는 것보다 더 빨리 수행하는 것은 무의미합니다. 렌더링하지 않을 물건을 계산할 것이므로 사용자는 결코 볼 수 없기 때문입니다.

그래서 타이머를 설정하여 33 밀리 초마다 실행하고, 계산을 수행하고, 프레임을 렌더링하고 타이머가 다시 작동 할 때까지 운영 체제로 돌아갑니다.

+1

위대한 조언 마이크! 고맙습니다! 'Timer' 클래스를 살펴 보겠습니다. – ntgCleaner

관련 문제