java - 如何延迟这个for循环
问题描述
我正在制作坦克游戏,为此我想在屏幕上显示镜头。击球应该一秒一秒地越过孔筛,它应该从一侧平滑地移动到另一侧,但它只是从一侧冲到另一侧。我通过 for 循环进行了 20 次,如果 1 秒钟想要停止,但如果我单击拍摄按钮,textView 会消失并在 20 秒后显示在另一侧。我怎样才能延迟这个循环并在整个屏幕上逐步移动 textView ,它看起来像一个镜头?我已经尝试过线程、可运行和倒计时但没有成功。
这是我的拍摄功能
public void shot(final int power, float winkel, Button button) {
if (winkel > 90) {
winkel = winkel - 10;
} else if (winkel < 90) {
winkel = winkel + 10;
}
final Handler handler = new Handler();
final float finalWinkel = winkel;
handler.postDelayed(new Runnable() {
@Override
public void run() {
for (double i = 0; i < 20; i = i + 1) {
TextView textView = new TextView(context);
textView.setText(".");
double x = tanks.get(currentTank).getxPos() + (i * power * Math.cos(finalWinkel * (Math.PI / 180)));
double y = tanks.get(currentTank).getyPos() + (-1 * (i * power * Math.sin(finalWinkel * (Math.PI / 180))));
double gravity = (-1 * ((9.81 / 2) * Math.pow(i, 2)));
y = (y - gravity);
System.out.println(x + "/" + y);
textView.setX((float) x);
textView.setY((float) y);
textView.setTextSize(50);
layout.addView(textView);
if (textView.getY() >= 400 && i > 2) {
System.out.println("BOOOOOOOM");
displayExplosion(textView.getX(), textView.getY());
break;
}
for (int j = 0; j < tanks.size(); j++) {
if (textView.getX() > tanks.get(j).getxPos() && textView.getX() < tanks.get(j).getxPos() + 100) {
if (textView.getY() > tanks.get(j).getyPos() && textView.getY() < tanks.get(j).getyPos() + 100) {
float k = tanks.get(j).getxPos() - textView.getX();
if (k < 0) {
k = k * -1;
}
makeDamage(k, tanks.get(j));
displayExplosion(textView.getX(), textView.getY());
}
}
}
layout.removeView(textView);
handler.postDelayed(this, 1000);
}
}
}, 1000);
}
解决方案
推荐阅读
- python - Python 新手 - 打印功能问题
- javascript - 该网站如何在没有任何权限的情况下控制用户在选项卡之间的导航?
- swift3 - 数据已通过 tableview 中的 didselect 传递到下一个视图控制器。弹出到上一个视图控制器时出错[索引超出范围]
- ruby - Ruby 无法加载“sqlite3”
- python-3.x - 如何通过从“ndiff”附加类似的行来获得编辑结果?
- javascript - 如何等到模态关闭并根据单击确定或取消继续执行?
- c# - 如何使用自定义类作为实体的属性并通过 Entity Framework Core 进行转换?
- javascript - JAVASCRIPT - 将值附加到一组选择选项中的一个选择选项
- node.js - 致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足
- tensorflow - 在 seq2seq 模型实施中需要建议