回答-赛车状况

因此,这是我正在制作的游戏中产生障碍的类,每当障碍物离开屏幕时,它都会清除障碍物并增加得分。这可以正常工作,但是预期时布尔值(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方法才能正常工作。]
如果问题很明显,我很抱歉,我是第一次学习教程,并决定为自己尝试一些东西。

最佳答案

我看到两种可能性:


您的系统足够慢,以至于在if方法的第一个update()中设置了布尔值之后,立即进入了第二个if并将变量设置为false(我发现这不太可能,但是如果您可能正在某种模拟器中运行?)。可能值得进行一些日志记录,以确认绘图是在将此变量设置为true和false之间进行的。
plusScore方法中的update()变量与plusScore方法中的draw()变量不同。这两种方法都在同一类中吗?我可以说您的plusScore变量是代码段中的一个字段,但是如果这两个代码段不在同一类中,则您正在处理两个完全独立的变量。

10-04 19:26