答案 - 比赛条件
所以这就是我制造的游戏类产生的障碍,每当障碍物离开屏幕时它就会消除障碍并增加分数。这样可以正常工作,但布尔值(plusScore)在预期时不会变为true。
public void update() {
//
if(obstacles.get(obstacles.size() - 1).getRectangle().top >= Constants.SCREEN_HEIGHT) {
int xStart = (int)(Math.random()*(Constants.SCREEN_WIDTH - playerGap));
obstacles.add(0, new Obstacle(obstacleHeight, color, xStart, obstacles.get(0).getRectangle().top - obstacleHeight - obstacleGap, playerGap));
obstacles.remove(obstacles.size() - 1);
score += 10;
plusScore = true; //Problem here
tempTime = (int)System.currentTimeMillis();
}
if (tempTime + 5 <= System.currentTimeMillis()) {
plusScore = false; //Unsure if working as relying on above
}
}
这(下面)是我要求布尔的地方,我包括方法的第一部分,因为我不确定是否可能存在冲突。
public void draw(Canvas canvas) {
for(Obstacle ob : obstacles)
ob.draw(canvas);
Paint paint = new Paint();
paint.setTextSize(100);
paint.setColor(Color.BLACK);
canvas.drawText(" " + score, 50, 50 + paint.descent() - paint.ascent(), paint);
if(plusScore) { //This is what the Boolean should effect
Paint paint2 = new Paint();
paint2.setTextSize(100);
paint2.setColor(Color.GREEN);
drawPlusScore(canvas, paint2, "+10!");
}
}
[只是为了澄清当没有if语句时draw方法正常工作。] 如果问题很明显,我道歉,我第一次关注教程并决定为自己尝试一些事情。
答案 0 :(得分:1)
我看到两种可能性:
您的系统速度足够慢,在if
方法的第一个update()
中设置该布尔值后,您立即进入第二个if
并将变量设置为false
(我发现这很不可能,但如果您在某种模拟器中运行可能会?)。可能值得进行一些记录以确认绘图发生在您将此变量的设置设置为true和false之间。
plusScore
方法中的update()
变量与plusScore
方法中的draw()
变量不同。这两种方法都属于同一类吗?我可以说你的plusScore
变量是你的代码片段中的一个字段,但是如果这两个代码片段不在同一个类中,那么你正在处理两个完全独立的变量。
答案 1 :(得分:1)
每次调用plusScore
时,update
都会设置为false。试试这个:
public class CheckTime {
public static void main(String []args){
int tempTime = (int) System.currentTimeMillis();
long longTime = System.currentTimeMillis();
System.out.println("As long: " + longTime);
System.out.println("As int: " + tempTime);
System.out.println("Check: " + (tempTime + 5 < longTime));
}
}
输出结果为:
As long: 1490102795366
As int: -250856346
Check: true
这意味着:因为您将当前时间从long
转换为int
,所以会出现溢出。这就是为什么你update
中的最后一个if语句永远都是真的。
您应该尽量避免比较两种不同的类型,例如int
和long
(除非您确定它是相同的,但您应该能够使用相同的类型)。将tempTime
更改为长,删除演员,它将起作用。
另一个提示:plusScore
和tempTime + 5 <= System.currentTimeMillis()
在此示例中具有相同的语义。因此,您可以摆脱plusScore
并使用update
中draw
的if语句来获得相同的行为。