BEANTWORTET - Racing ZustandBoolean nicht wie erwartet ändern
Das ist also die Klasse für das Spiel, das ich mache, dass erzeugt Hindernisse, jedes Mal, wenn ein Hindernis Bildschirm erlischt es das Hindernis entfernt und fügt zu der Partitur. Das funktioniert gut, aber der Boolesche Wert (plusScore) ändert sich nicht in wahr, wenn er erwartet wird.
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
}
}
Diese (unten) ist, wo ich für die Boolesche bin Aufruf enthalten ich den ersten Teil des Verfahrens, da ich nicht sicher war, ob es möglich Konflikt sein könnte.
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!");
}
}
[Nur das Streck-Verfahren funktioniert gut zu klären, wenn es keine if-Anweisung ist.] Wenn das Problem liegt auf der Hand Ich entschuldige mich, ich bin nach einem Tutorial zum ersten Mal und beschlossen, etwas für mich zu versuchen, .
ist diese Bedingung erfüllt: objections.get (objections.size() - 1) .getRectangle(). Top> = Constants.SCREEN_HEIGHT –
Ja, es funktioniert und erhöht die Punktzahl um 10 jedes Mal, wenn sie vom Bildschirm gehen (I habe im Emulator nachgecheckt) – George
Ich vermute einen Rennzustand.Versuchen Sie, den Boolean in 'draw' nicht in' update' zurückzusetzen -> setzen Sie plusScore = false; 'als erste Anweisung in' if (plusScore) '. Werden 'update' und' draw' auf verschiedenen Threads aufgerufen? Wenn ja, versuchen Sie es flüchtig zu machen. – Fildor