Ich programmiere ein einfaches Spiel, in dem der Ball hüpfen soll, wenn er gegen die Wand schlägt. Ich habe JavaFX für die GUI, Canvas und GraphicsContext zum Zeichnen verwendet.Zeichnen eines bewegten Balls mit Canvas mit JavaFX
Mein Code zum Zeichnen des Balls:
public void moving(){
gc.setFill(Color.BLACK);
gc.fillOval(ball.getCenterX()-15, ball.getCenterY()-15, 30,30);
if (ball.getCenterX()<285 && ball.getCenterX()>15) {
double xtemp = ball.getCenterX()+vektorx;
ball.setCenterX(xtemp);
} else {
vektorx = -vektorx;
double xtemp = ball.getCenterX()+vektorx;
ball.setCenterX(xtemp);
}
if (ball.getCenterY()<485 && ball.getCenterY()>15) {
double ytemp = ball.getCenterY()+vektory;
ball.setCenterY(ytemp);
} else {
vektory = -vektory;
double ytemp = ball.getCenterY()+vektory;
ball.setCenterY(ytemp);
}
gc.setFill(Color.AQUA);
gc.fillOval(ball.getCenterX()-15, ball.getCenterY()-15, 30,30);
}
Beachten Sie, dass gc
die Graphics I verwendet. Alles funktioniert so, wie es angenommen hat, aber nur eine Sache stört mich:
Der Ball hinterlässt eine Spur der Straße seiner genommen und es stört mich sehr. Ich habe den Code für einen Zug ausprobiert (zeichne ihn wieder in blau und schwarz), er hinterlässt keine Spur, aber wenn ich ihn auf einen Thread lege und ihn laufen lasse, passiert dieses Ding.
ich nicht sehen, Irgendein Code hier, um den GraphicsContext bei jedem Tick der Animation zu löschen oder ihn mit Schwarz oder etwas zu füllen. Es ist also nicht besonders überraschend, dass es hinter sich eine Spur hinterlässt. – ManoDestra
gut, wenn ich dich richtig verstehe, habe ich den Ball schwarz gemalt, bevor die Bewegung passiert (Koordinaten des Ballwechsels). Sie konnten es alle die ersten Zeilen der Methode sehen. Ich lerne so bitte erleuchte mich wenn es etwas gibt, das ich nicht kenne. –
Nun, wenn Sie den Ball malen, ihn während eines Updates bewegen und dann neu streichen, wird er eine Spur vom vorherigen Ball hinterlassen. Normalerweise müssen Sie vor allen Zeichenoperationen die gesamte Zeichenfläche (oder GraphicsContext) löschen, es sei denn, Sie können dies so tun, dass die Zeichenoperation für alles umgekehrt wird. Es ist die Art von [sofortiger Modus] (https://en.wikipedia.org/wiki/Immediate_mode_%28computer_graphics%29) Zeichnung. – ManoDestra