2016-04-13 7 views
3

Duvara vurduğunda topun zıplaması gereken basit bir oyun programlıyorum. Çizim için GUI, Canvas ve GraphicsContext için JavaFX kullandım. Topu Çizim içinJavaFX ile Tuval ile hareketli bir top çizimi

Kodum: gc kullandım GraphicsContext olduğunu

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); 
} 

Not. Her şey olması gerektiği gibi çalışır, ancak tek bir şey beni rahatsız:

ball with blue trail

top onun alıyordu yolun bir iz bırakmaz ve onu çok beni rahatsız ediyor. Tek bir hareketin kodunu denedim (mavi ve siyahta tekrar çiziyorum), iz bırakmaz, ama bir iş parçacığı üzerine koyup çalışmasına izin verdiğimde, bu şey olur.

+0

görmüyorum Buradaki herhangi bir kod, GraphicsContext'i animasyonun her işaretinde temizler veya siyah veya bir şeyle doldurur. Yani, arkasında bir iz bıraktığını bulmak özellikle şaşırtıcı değildir. – ManoDestra

+1

iyi anlıyorsanız, hareket gerçekleşmeden önce topu boyadım (topun koordinatları değişti). Yöntemin tüm ilk satırlarını görebilirsiniz. Öğreniyorum, lütfen bilmiyorum bir şey varsa beni aydınlatın. –

+1

Eğer topu boyayorsanız, bir güncelleme sırasında hareket ettirin, sonra tekrar boyayın, bir önceki toptan bir iz bırakacaktır. Normalde, tüm çizim işlemlerinden önce tüm tuvali (veya GraphicsContext) temizlemeniz gerekir, aksi takdirde her şeyin çekiş işlemi tersine çevrilebilir. Bu [acil mod] (https://en.wikipedia.org/wiki/Immediate_mode_%28computer_graphics%29) çiziminin doğası. – ManoDestra

cevap

1

Ben JavaFX hakkında çok, ben grafikler için farklı bir sistem kullandığını bilmiyorum ama başında bu eklerseniz düşünüyorum, biraz yardımcı olabilir:

gc.clearRect(0D, 0D, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height); 
İlgili konular