变量始终为“0.0”
Variable always being "0.0"
此代码循环运行,但变量d
始终为“0.0”(使用断点测试)。
private static float startTime;
private boolean attackCore(Canvas canvas, RectF eCastle, float width, float height) {
if (startTime == -1) startTime = System.currentTimeMillis();
randomX = new Random((long) width);
randomY = new Random((long) height);
float x2 = randomX.nextFloat() + eCastle.right;
float y2 = randomY.nextFloat() + eCastle.top;
double d = ((System.currentTimeMillis() - startTime) / 1000) * 30;
float[] c = Game.moveTo(x1, y1, x2, y2, d);
if (d >= sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2))) {
canvas.drawBitmap(arrow, x2, y2, null);
startTime = -1;
return true;
}
canvas.drawBitmap(arrow, c[0], c[1], null);
return false;
}
这是 Game
中的 moveTo
:
public static float[] moveTo(float xA, float yA, float xB, float yB, double dAC) {
double dAB = sqrt(pow(xA - xB, 2) + pow(yA - yB, 2));
float xC = (float) (xA + (xB - xA)*dAC/dAB);
float yC = (float) (yA + (yB - yA)*dAC/dAB);
return new float[] {xC, yC};
}
我尝试使变量成为非静态变量并将其值设置为 -1。还必须说代码在另一个 class 中工作,所以我有点不知道错误在哪里,如果您需要代码的另一部分,请问我。
System.currentTimeInMillis()
是一个长
(long - long) / int = int
如果 currentTime - startTime / 1000
,则 currentTime - startTime<1000 = 0
总是
你需要将它们转换为浮点数
(浮动)(当前时间 - 开始时间)/ 1000.f
发生这种情况是因为将 System.currentTimeMillis()
从 long
转换为 float
时会丢失精度。对于大至 System.currentTimeMillis()
通常 returns 的值,连续 float
值的间距比整数大得多。
您应该 startTime
作为 long
。可能 d
也应该是 long
。当你做除法时,确保你在除法之前做乘法,这样四舍五入的时间越晚越好。
long startTime;
// ... assign startTime to whatever it's supposed to be
long d = (System.currentTimeMillis() - startTime) * 30 / 1000;
此代码循环运行,但变量d
始终为“0.0”(使用断点测试)。
private static float startTime;
private boolean attackCore(Canvas canvas, RectF eCastle, float width, float height) {
if (startTime == -1) startTime = System.currentTimeMillis();
randomX = new Random((long) width);
randomY = new Random((long) height);
float x2 = randomX.nextFloat() + eCastle.right;
float y2 = randomY.nextFloat() + eCastle.top;
double d = ((System.currentTimeMillis() - startTime) / 1000) * 30;
float[] c = Game.moveTo(x1, y1, x2, y2, d);
if (d >= sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2))) {
canvas.drawBitmap(arrow, x2, y2, null);
startTime = -1;
return true;
}
canvas.drawBitmap(arrow, c[0], c[1], null);
return false;
}
这是 Game
中的 moveTo
:
public static float[] moveTo(float xA, float yA, float xB, float yB, double dAC) {
double dAB = sqrt(pow(xA - xB, 2) + pow(yA - yB, 2));
float xC = (float) (xA + (xB - xA)*dAC/dAB);
float yC = (float) (yA + (yB - yA)*dAC/dAB);
return new float[] {xC, yC};
}
我尝试使变量成为非静态变量并将其值设置为 -1。还必须说代码在另一个 class 中工作,所以我有点不知道错误在哪里,如果您需要代码的另一部分,请问我。
System.currentTimeInMillis()
是一个长
(long - long) / int = int
如果 currentTime - startTime / 1000
,则 currentTime - startTime<1000 = 0
总是
你需要将它们转换为浮点数
(浮动)(当前时间 - 开始时间)/ 1000.f
发生这种情况是因为将 System.currentTimeMillis()
从 long
转换为 float
时会丢失精度。对于大至 System.currentTimeMillis()
通常 returns 的值,连续 float
值的间距比整数大得多。
您应该 startTime
作为 long
。可能 d
也应该是 long
。当你做除法时,确保你在除法之前做乘法,这样四舍五入的时间越晚越好。
long startTime;
// ... assign startTime to whatever it's supposed to be
long d = (System.currentTimeMillis() - startTime) * 30 / 1000;