我如何制作一个减少数字的函数(例如从 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 我可能会使用 Handler
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
,或者在用户离开 activity/context 时调用 运行。
这是一个使用计时器的解决方案。如果您不想在循环中调用该方法,则每次调用它时只需将延迟参数减去 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);
}
计时器设置为 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 我可能会使用 Handler
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
,或者在用户离开 activity/context 时调用 运行。
这是一个使用计时器的解决方案。如果您不想在循环中调用该方法,则每次调用它时只需将延迟参数减去 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);
}