在java中,如何让代码在一定时间后运行
你好,我先发了我的代码。我想在这里做的是在黑板上画导弹,但不是同时画所有导弹,然后在x毫秒/微秒后分别画。无论如何,这个代码不起作用,我不明白为什么在java中,如何让代码在一定时间后运行,java,android,android-studio,Java,Android,Android Studio,你好,我先发了我的代码。我想在这里做的是在黑板上画导弹,但不是同时画所有导弹,然后在x毫秒/微秒后分别画。无论如何,这个代码不起作用,我不明白为什么 Kees您的条件是错误的,您希望当到达代码的这一部分时,您的nanotime正好等于“1000000”,这将是非常幸运的。您应该使用>= 你确定你的循环应该如何工作吗?你无法控制它循环的速度(好吧,不是那样的,这不应该是你的目标),这里的每一个循环你都会失去一枚可能发射的导弹。例如,可以从以下内容开始: @Override protecte
Kees您的条件是错误的,您希望当到达代码的这一部分时,您的nanotime正好等于“1000000”,这将是非常幸运的。您应该使用>= 你确定你的循环应该如何工作吗?你无法控制它循环的速度(好吧,不是那样的,这不应该是你的目标),这里的每一个循环你都会失去一枚可能发射的导弹。例如,可以从以下内容开始:
@Override
protected void onDraw(Canvas canvas) {
//Drawing the background and sprites as it is a blackboard.
canvas.drawBitmap(scaledbmp, 0, 0, null);
sprite.onDraw(canvas);
boolean new_missle = true;
missileStartTime = System.nanoTime();
for (int i = missleslist.size() - 1; i >= 0; i--) {
if (new_missle) {
missleslist.get(i).onDraw(canvas);
new_missle = false;
}
if (!new_missle && (missileStartTime - System.nanoTime()) == 1000000){
new_missle = true;
missileStartTime = System.nanoTime();
}
}
}
正如其他人已经指出了您现有代码中存在的一些问题,我不会在这里重复这些问题 因为您在问题中添加了(错误的)标记,并且您使用的是
View#onDraw(Canvas)
,所以我假设您谈论的是Android
您应该使用Android类,特别是处理程序35; postDelayed(int)
方法来延迟稍后执行的代码:
//as long as you have missiles, it'll try to fire
while(missleslist.size() > 0) {
if (System.nanoTime() - missileStartTime >= 1000000){
missleslist.get(0).onDraw(canvas);
missleslist.remove(0);
missileStartTime = System.nanoTime();
}
}
@覆盖
受保护的void onDraw(画布){
//将背景和精灵绘制为黑板。
drawBitmap(scaledbmp,0,0,null);
雪碧(帆布);
StartDrawing飞弹(画布,导弹列表,0);
}
私有void startDrawing飞弹(画布、列表、导弹列表、,
int(当前索引){
if(currentIndex }, 1000000);//我从来没有使用过这个平台……但是你不能让你的程序休眠x秒,然后在它醒来时画图……然后再休眠,然后再唤醒等等……你几乎永远不会得到100万纳秒的差。每次循环迭代的运行时都会有一些变化,你会从9999999->1000,001并且从不触发if(),因为你没有击中那一个神奇的时差。它应该是=
,而不是=
。什么不起作用?你能提供一些细节吗?请检查你的第二个if语句的条件:使用==运算符正确吗?将它改为=
1000000,而不是=
@StefanFreitag This program应该从arraylist中绘制精灵,但要等一段时间才能绘制列表中的下一个元素。现在它只绘制一个元素,应该绘制三个元素,时间间隔为3。是的,我也这么认为,循环确实不起作用……我会尝试这个:)有一个输入错误,但应该是Systems.nanoTime()-missionstartime由于实际时间将大于旧时间,修复了无限循环hmmmmm,我有完全相同的问题:导弹不会发射
@Override
protected void onDraw(Canvas canvas) {
//Drawing the background and sprites as it is a blackboard.
canvas.drawBitmap(scaledbmp, 0, 0, null);
sprite.onDraw(canvas);
startDrawingMissiles(canvas, missileList, 0);
}
private void startDrawingMissiles(Canvas canvas, List<Missiles> missileList,
int currentIndex) {
if (currentIndex < missileList.size()) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
missileList.get(currentIndex).onDraw(canvas);
startDrawingMissiles(canvas, missileList, ++currentIndex);
}
}, 1000000); // <- Your duration
}
}