簡體   English   中英

如何制作減少數值的函數(例如,從800毫秒減少到200毫秒)

[英]How can I make a function that decreases a number (from 800 milliseconds to 200 milliseconds for example)

計時器的設置時間為800毫秒,因此,總是RandomPositions()將每800毫秒(該時間段)執行一次內部代碼。 現在,我想要的是每20秒或20,000毫秒將此數字減少50,直到周期達到200毫秒。

目標-在游戲中,必須每20秒逐步增加速度。

例如:第一次執行-800毫秒,第二次執行-750毫秒,第三次執行-700毫秒,依此類推...

我的想法是,我可以插入一個Integer類型的函數(而不是800),這會使這項工作從800毫秒減少到200毫秒。

我該如何做這個功能? 還是有其他解決方案?

public void RandomPositions() {

        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask()
        {
            public void run() {

                getWindowManager().getDefaultDisplay().getMetrics(displaymatrics);
                float dx = r.nextFloat() * displaymatrics.widthPixels/1.2f;
                float dy = r.nextFloat() * displaymatrics.heightPixels/1.2f;
                button.animate().x(dx).y(dy).setDuration(0);


            }
        }, 0, 800);  // first value = Delay   , Second value = Period(what I need to change)

我不會為此使用計時器,因為間隔一直在變化。

在香草Android中,我可能會使用處理程序

Int interval = 800; // milliseconds
Handler handler = new Handler()
Runnable runnable = new Runnable() { 

   @Override void run() {

        //
        // do your logic here
        //

        // decrement interval by 20 milliseconds 
        // if interval - 20 is greater than 200
        interval = interval - 20 > 200 ? interval - 20 : interval;


        // Request an execution of this runnable with the new value of interval
        handler.postDelayed(runnable, interval);
   }
}


public void start() {
   handler.postDelayed(runnable, interval);
}

public void stop() { 
   handler.removeCallbacks(runnable);
}

確保無論何時要停止它,或者每當用戶將活動/上下文離開運行時,都調用removeCallbacks

這是使用計時器的解決方案。 如果您不想在循環中調用該方法,則每次調用時只需將delay參數減去50。

    public static void main(String[] args) {                
        Timer timer = new Timer();              
        for(int i = 800; i >= 200; i-=50)
        {
            runTimer(timer, i);         
        }   
    }   

    private static void runTimer(Timer timer, int delay) {
        timer.schedule(new TimerTask()
        {
            public void run() {
            }                
        }, 0, delay);  
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM