我有一个小游戏,在一个随机位置产生一个敌人,并保持传送到另一个随机位置每秒钟。我的问题是,我不知道如何使传送更快的计时器不断减少。
我的计时器从60秒开始计时,一直到“还剩0秒”为止,游戏结束。
我想把“传送”的延迟改成->每0,8秒45秒或者每0,5秒25秒等等。
所以计时器的周期在经过一定时间后会自动改变。
这是我到目前为止尝试过的,但没有任何效果。在整个60秒内,传送仍然每1秒发生一次。
static int period;
static int periodCounter = 0;
// Load progressBar from 0s to 60s
private void progressLoad() {
final int[] counter = {pgrBar.getProgress()};
final Timer timer = new Timer();
final TimerTask timerTask = new TimerTask() {
@Override
public void run() {
counter[0]++;
periodCounter++;
pgrBar.setProgress(counter[0]);
runOnUiThread(new Runnable() {
public void run() {
tv_progress.setText("Zeit verbleibend: " + (60 - counter[0]));
}
});
if (counter[0] == 60)
timer.cancel();
if (counter[0] == 60)
gameOver();
}
};
timer.schedule(timerTask, 0, 1000);
}
// Change period variable depending on seconds left
private void changePeriod() {
if (periodCounter <= 10)
period = 1000;
else if (periodCounter <= 20)
period = 800;
else if (periodCounter <= 30)
period = 600;
else if (periodCounter <= 40)
period = 475;
else if (periodCounter <= 50)
period = 350;
}
// TimerTask for teleporting the enemy to random position (x,y) starting at every 1 sec
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Random R = new Random();
float dx = R.nextFloat() * width[0];
float dy = R.nextFloat() * height[0];
if (dx > (width[0] - imWidth[0]))
dx = width[0] - imWidth[0];
if (dy > (height[0] - imHeight[0]))
dy = height[0] - imHeight[0];
iv_muecke.animate()
.x(dx)
.y(dy)
.setDuration(0)
.start();
}
});
}
}, 0, period);
1条答案
按热度按时间cig3rfwq1#
根本原因
在android系统中,计时器安排任务一次性执行,或定期重复执行。这就解释了为什么你打电话的时候
schedule()
然后传球period
,然后会定期重复。解决方案
如果您想安排在动态时间执行的任务,那么使用handler。所以把你的密码改成。