Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de Layout (surrement ???)

C'est bizzare et incompréhensible .

Sujet résolu
    17 février 2017 à 2:05:24

    Alors voilà ... j'ai décidé depuis peu que j'allais faire un jeu ... basique , android et comme chacun sait il faut passer par le java (non pour unreal ungine et tout ... je veux FAIRE/DEVELOPPER mon jeu)

    Sauf que je me heurte à un problème quelque peu "troublant" ... si ce n'est insupportable:

    lorsque que je teste mon jeu , le programme compile , tout ce passe normalement:

    (ma boule rouge se déplace selon les touches du clavier) jusqu'au moment ou elle disparaît derriere une sorte de second "JPanel" (alors que je suis censé n'en n'avoir qu'un sur cette fenêtre) et elle laisse derrière elle une trace rouge bizarre (je ne l'ai pas demandé dans le code et en plus , normalement je suis censé avoir un rectangle bleu qui "efface" toute la surface du "JPanel") :

    Je vous met donc le code à disposition si vous voulez bien m'aider (merci beaucoup d'avance):

    Classmain:

    public class ClassMain {
    
    	public static void main(String[] args) {
    		ThreadControl trd1 = new ThreadControl("Game");
    		trd1.start();
    		ThreadControl trd2 = new ThreadControl("Control");
    		trd2.start();
    	}
    }

    ThreadControl :

    public class ThreadControl extends Thread{
    	private String name;
    	public ThreadControl(String truc){
    		super(truc);
    		this.name = truc;
    	}
    	public void run(){
    	if (this.name == "Game"){
    	@SuppressWarnings("unused")
    	Fenetre fenGame = new Fenetre();}
    	else
    	if (this.name == "Control"){
    	@SuppressWarnings("unused")
    	PanneauControl fenCtrl = new PanneauControl();
    	}
    	}
    }

    Fenetre :

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Toolkit;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    
    import javax.swing.JFrame;
    
    public class Fenetre extends JFrame implements KeyListener{
    	/**
    	 * 
    	 */
    		private static final long serialVersionUID = 1L;
    		public static Toolkit tk = Toolkit.getDefaultToolkit();
    		public static Dimension dem = tk.getScreenSize();
    		private PanneauGame gameScreen = new PanneauGame();
    		private boolean avancer = false;
    		private boolean reculer = false;
    		private boolean droite = false;
    		private boolean gauche = false;
    		private boolean attk1 = false;
    		
    	public Fenetre(){
    		this.setTitle("Test Game 1");
    		this.setSize((int)(dem.width/1.2),(int)(dem.height/1.2));
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setLocationRelativeTo(null);
    		
    		this.setBackground(Color.WHITE);
    		this.add(gameScreen,BorderLayout.CENTER);
    		this.addKeyListener(this);
    		
    		this.setVisible(true);
    		while(true){
    			try {
    				Thread.sleep(5);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    			if (avancer){gameScreen.setY(gameScreen.getY()-1);}
    			if (reculer){gameScreen.setY(gameScreen.getY()+1);}
    			if (droite){gameScreen.setX(gameScreen.getX()+1);}
    			if (gauche){gameScreen.setX(gameScreen.getX()-1);}
    			if (attk1){}
    			gameScreen.repaint();
    		}
    	}
    	
    	@Override
    	public void keyPressed(KeyEvent e) {
    		if(e.getKeyCode()==PanneauControl.getUpKey()){
    			System.out.println("vous avez apuyé sur haut");
    			avancer=true;
    		}
    		if(e.getKeyCode()==PanneauControl.getDownKey()){
    			System.out.println("vous avez apuyé sur bas");
    			reculer=true;
    		}
    		if(e.getKeyCode()==PanneauControl.getRightKey()){
    			System.out.println("vous avez apuyé sur droite");
    			droite =true;
    		}
    		if(e.getKeyCode()==PanneauControl.getLeftKey()){
    			System.out.println("vous avez apuyé sur gauche");
    			gauche = true;
    		}
    		if(e.getKeyCode()==PanneauControl.getAttk1()){
    			attk1=true;
    		}
    		}
    
    	@Override
    	public void keyReleased(KeyEvent arg0) {
    		if (arg0.getKeyCode()==PanneauControl.getLeftKey()){gauche=false;}
    		if(arg0.getKeyCode()==PanneauControl.getRightKey()){droite=false;}
    		if(arg0.getKeyCode()==PanneauControl.getUpKey()){avancer=false;}
    		if(arg0.getKeyCode()==PanneauControl.getDownKey()){reculer=false;}
    		if (arg0.getKeyCode()==PanneauControl.getAttk1()){attk1=false;}
    	}
    
    	@Override
    	public void keyTyped(KeyEvent arg0) {
    		
    	}
    	
    
    }
    

    PanneauGame (je sais c'est nul comme nom de classe main je suis pas écrivain)

    import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.JPanel;
    
    public class PanneauGame extends JPanel{
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	private int width=(int)((Fenetre.dem.width)/50);
    	private int height=width;
    	private int x=width;
    	private int y=width;
    	public void paintComponent(Graphics g){
    		g.setColor(Color.BLUE);
    		g.fillRect(0, 0, this.getWidth(), this.getHeight());
    		g.setColor(Color.RED);
    		g.fillOval(x, y, width, height);
    		g.setColor(Color.BLACK);
    		g.drawString("Coordonées : "+x+" , "+y, 30, 30);
    	}
    	
    	public int getX(){
    		return x;
    	}
    	public int getY(){
    		return y;
    	}
    	public void setX(int xIn){
    		x=xIn;
    	}
    	public void setY(int yIn){
    		y=yIn;
    	}
    }
    

    PanneauControl (et ceux qui font des remarques sur les nom que j'emplois pour mes classe je vais les  ^ù*$ù:8€ à la sortie ils vont comprendre ^^ !!!)

    import java.awt.BorderLayout;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class PanneauControl extends JFrame implements KeyListener{
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	private static int upKey=0;
    	private static int downKey=0;
    	private static int rightKey=0;
    	private static int leftKey=0;
    	private static int attk1=0;
    	private int key=0;
    	private JLabel label = new JLabel("Configurez le clavier ...");
    	private JLabel config = new JLabel();
    	private JPanel pan = new JPanel();
    	private JFrame fen = new JFrame();
    	public PanneauControl(){
    		fen.setSize((int)((Fenetre.dem.width)/6),(int)((Fenetre.dem.height)/6));
    		fen.setVisible(true);
    		fen.setLocationRelativeTo(null);
    		fen.setContentPane(pan);
    		fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    		pan.setLayout(new BorderLayout());
    		pan.add(label,BorderLayout.NORTH);
    		pan.add(config, BorderLayout.SOUTH);
    		
    		label.setHorizontalAlignment(JLabel.CENTER);
    		config.setHorizontalAlignment(JLabel.CENTER);
    		
    		config.setText("Appuyez sur :   \"HAUT\""); 
    		fen.addKeyListener(this);
    		}
    
    	@Override
    	public void keyPressed(KeyEvent e) {
    		if (key==4){
    			attk1=e.getKeyCode();
    			fen.setVisible(false);
    		}
    		if (key == 3){
    			key++;
    			leftKey = e.getKeyCode();
    		config.setText("Appuyez sur :   \"ATTAQUE-1\"");}
    		if (key == 2){
    			key++;
    			rightKey = e.getKeyCode();
    		config.setText("Appuyez sur :   \"GAUCHE\"");}
    		if (key == 1){
    			key ++;
    			downKey = e.getKeyCode();
    		config.setText("Appuyez sur :   \"DROITE\"");}
    		if (key == 0){
    			key++;
    			upKey =e.getKeyCode();
    		config.setText("Appuyez sur :   \"BAS\"");}
    	}
    
    	@Override
    	public void keyReleased(KeyEvent e) {}
    
    	@Override
    	public void keyTyped(KeyEvent e) {}
    	
    	public static int getUpKey (){
    		return upKey;
    	}
    	
    	public static int getDownKey(){
    		return downKey;
    	}
    	
    	public static int getRightKey(){
    		return rightKey;
    	}
    	
    	public static int getLeftKey(){
    		return leftKey;
    	}
    	public static int getAttk1(){
    		return attk1;
    	}
    	
    }
    

    J'ai une dernière chose à dire : mon installation du JDK eclipse ... ne vient pas d'eclipse , ni de Orcale et encore moins de sunMicrosystems mais bien de Android_Studio (au premier démarage d'éclipse j'ai eu le flemme de réinstaller le JDK alors que je l'avais déjà pour android (normalement les version sont identiques) du coup j'ai configuré "C:\programFiles\Android\Java\Java1.8\bin\javac.exe" comme compilateur).  Jusqu'à là mon montage fonctionnait parfaitement (9 projets eclipse n'ont pas buggé)

    DANS TOUT LES CAS : MERCI BEAUCOUP d'avance à tout ceux qui tenterais de m'aider même si c'est peut être en vain (ou peut etre pas #espoir).

    -
    Edité par DucPearce 17 février 2017 à 2:24:40

    • Partager sur Facebook
    • Partager sur Twitter
    THE_BIG_LEBOWSKY
      18 février 2017 à 0:43:20

      Probème résolu

      • Partager sur Facebook
      • Partager sur Twitter
      THE_BIG_LEBOWSKY

      Problème de Layout (surrement ???)

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown