2016-03-22 18 views
0

Okul ödevi için yılan yapıyorum ve arka planı netleştirmeye çalışırken bir sorunla karşılaştım. Arka plan rengini değiştirmeden önce çalıştı. Bununla birlikte, artık çizilmiş ve sonra örtülmüş olan her şeyi silmeyecektir. Örneğin: skor değiştiğinde, sayılar birbirinin üstünde görünecek ve yılanın önceki konumları silinmeyecek ve hala orada görünecek gibi görünecektir. Mevcut masaüstü arkaplanı kullanarak beni ilgilendiren bir fikrim var.Geçerli masaüstü arka planını içe aktarmanın herhangi bir yolu var mı?

Sınıf 1:

public class gameWindow extends JFrame { 

    public gameWindow() { 

add(new SashaOhayonSnakeFST()); 
setResizable(false); 
pack(); 
setLocationRelativeTo(null); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 


    public static void main(String[] args) { 

EventQueue.invokeLater(new Runnable() { //Creates queue to run events 
    public void run() {   //runs these events on new window 
    JFrame finalWindow = new gameWindow(); 
    finalWindow.setVisible(true); 
    finalWindow.setBackground(new Color (0,0,0,0)); 





    } 
}); 
    } 
    } 

(Düzenleyen) Sınıf 2:

private void draw(Graphics g) { 


    if (inGame) { 

     g.drawImage(apple, appleCoordinateX, appleCoordinateY, this); //Draws apple 


     for (int i = 0; i < dotNum; i++) { //Runs loop to draw each piece of the snake 
      if (i == 0) { 
       g.drawImage(head, coordinateX[i], coordinateY[i], this); //Draws the head in a different colour to body 
      } else { 
       g.drawImage(body, coordinateX[i], coordinateY[i], this); //Draws body 
      } 
     } 

     if ((Integer.toString(score*dotNum).length()) >= 3) { 
     size = 23; 
     fromEdge = 4; 
     } else if ((Integer.toString(score*dotNum).length()) >= 4) { 
      size = 15; 
      fromEdge = 3; 
     } 
     Font font = new Font("Comic Sans", Font.BOLD, size); 
     g.setColor(Color.RED); 
     g.setFont(font); 
     g.drawString(Integer.toString(score*dotNum), fromEdge, 30); //Draws scorekeeper 

    Toolkit.getDefaultToolkit().sync(); 
+0

Eğer 'masaüstü background' kullanımını açıklayabilir Opak olmak ayarlamalısınız? –

+0

Daha önce (arka plan siyahken) repaint() kullanırken, ekranda kullanılan mürekkep arka plan rengiyle kaplanmış olarak silinmiştir. Fakat arka plan rengi saydam olduğundan, arkaplan rengi artık mevcut olmadığından, esas olarak hiçbir şey olmadan üzerine resim yapmaktır. Masaüstü arkaplanını elde ederek, arka plana uygun olarak masaüstü arka planını kullanarak yeniden boyayarak kendi saydamlığımı oluşturabilirim. –

+0

Olası çoğaltılabilir [Grafik2D şeffaf görüntüyü temizlemez] (http://stackoverflow.com/questions/10406750/graphics2d-not-clearing-transparent-image) –

cevap

1

Sana JFrame değil JFrame içeriği bölmesinde için arka plan rengini ayarlamak gerek. Paneller & etiketler için

myJFrame.getContentPane().setBackground(desiredColor); 

, öğeyi

jpanel.setOpaque(true); 
+0

Bunu zaten denediniz, işe yaramadı. Aldığım en yakın ekran şeffaf pencerenin arka planını yakalamak için awt.Robot kullanıyor ve arka plan olarak ayarlıyordu, ancak bu, oyunu yavaşlatılmayacak hızlara indirdi. –

İlgili konular