2012-09-28 3 views
1

30 초에서 0 초까지 카운트 다운되는 보이는 타이머를 사용할 계획입니다. 이 타이머는 움직이는 스프라이트 (숫자 포함)를 만졌을 때 요청 된 숫자와 일치하지 않을 때마다 (창/공지에 표시된대로) 남은 현재 시간이 공제되기 때문에 내 게임 응용 프로그램에서 채점 기준이됩니다 5 초 (-5). 그러나 일치하는 숫자를 포함하는 스프라이트를 터치하면 타이머가 멈추고 게임이 다시 시작됩니다 (또는 다음 레벨로 이동). 여기 Android에서 채점하기 위해 타이머를 사용하는 방법은 무엇입니까?

GameView 클래스 내부 touchEvent위한 코드이다 :

@Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (System.currentTimeMillis() - lastClick > 300) { 
       lastClick = System.currentTimeMillis(); 
       float x = event.getX(); 
       float y = event.getY(); 
       synchronized (getHolder()) { 
         for (int i = sprites.size() - 1; i >= 0; i--) { 
           Sprite sprite = sprites.get(i); 
           if (sprite.wasPopped(x, y)) { 
            sprites.remove(sprite); 
            spritePopped.add(new TempSprite(temps, this, x, y, pop)); 
            break; 
           } 
         } 
       } 
     } 
     return true; 
    } 

이동 스프라이트를 둘러싸는 영역을 터치 할 때마다 (sprite.wasPopped)는,이 화면에서 제거되고 (상기 목록에서 할당 된) 및 이미지 (spritePopped)는 터치 한 곳을 나타냅니다 (추가 효과 용). 타이머에 대한 별도의 클래스를 만들고이를 내 GameView에 어떻게 활용합니까? 지금까지 나는 얼마나 많은 수의 update() 이벤트가 특정 클래스에서 호출되었는지에 따라 득점을위한 틱을 사용하여 보았습니다. 모든 의견/제안은 매우 유용 할 것입니다.

답변

0

TimerTask을 사용할 수는 있지만 기본 스레드에서 실행되지 않아 원치 않는 영향을 줄 수 있으므로 권장하지 않습니다.

당신이해야 할 일은 deltaTime을 가져 와서 변수에 저장하는 것입니다.

private float displayedTime; 

    Public void timer(){ //call in update() 
     displayedTime += deltaTime; 
    } 

그런 다음 원하는만큼 모든 초 또는 원하는 타이머를 얻기 위해 혼합 할 수 있습니다.

전체 FPS에서 게임을 실행할 수없는 장치에 나쁜 영향을 미치므로 시간을 확인하거나 지연을 추가하기 위해 업데이트 방법에 카운터를 사용하지 마십시오.

+0

나는 신체의 체중 측정으로 진드기를 사용하고 점수를 매기고 스프라이트의 이미지를 변경 한 클래스와 함께 배치합니다. (시나리오 : 풍선을 터치하면 화면에 거품이 생기고 터지는 이미지로 바뀝니다.) 지금까지는 아무 것도하지 않습니다. – aurezza

+0

그래서 정확히 무엇이 당신의 질문입니까? 코드에서 원하는 것은 무엇입니까? –

0

나는이에 대한 비슷한 질문을 발견했습니다, 여기에 타이머는 별도의 클래스에서 생성됩니다 :

import android.os.CountDownTimer; 
import android.widget.TextView; 

public class MyCount extends CountDownTimer { 
static TextView timeDisplay; 

public MyCount(long millisInFuture, long countDownInterval) { 
    super(millisInFuture, countDownInterval); 
} 

public void onFinish() { 
    timeDisplay.setText("Time has ended. Game over."); 
    //restart(); 
} 

public void onTick(long millisUntilFinished) { 
    timeDisplay.setText("Left: " + millisUntilFinished/1000); 
} 

} 이것은 다음합니다 (GameView 클래스에서 별도의 함수를 호출

하여 게임이 시작되면 이는) 시작 :

public void setTimer() { 
timeDisplay = new TextView(this); 
this.setContentView(timeDisplay); 
MyCount counter = new MyCount(30000, 1000); 
counter.start(); 

}

관련 문제