IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Rotation d'une image


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Par défaut Rotation d'une image
    Bonjour,
    Je viens de commencer à toucher un peu au graphics et au manipulation d'image mais je me retrouve face à un problème.

    J'ai réussi à faire déplacer mon image grâce au clavier (voir image) mais je souhaiterai maintenant la faire tourner pour que le vaisseau pointe vers le curseur de la souris... la je bloque...

    Avez vous des conseils à me donner ?

    Merci d'avance
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Ton problème est d'afficher une image en faisant une rotation ou bien de calculer l'angle de la dite rotation à partir de la position souris:vaisseau ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Par défaut
    Merci de ta réponse

    et bien, un peu des deux en faite !
    J'ai essayé avec quelques lignes de codes trouvés sur le net :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void rotate(MouseEvent e){
    		float xDistance = e.getX() - posX; //posX = position de l'image
    		float yDistance = e.getY() - posY;
    		double angleToTurn = Math.atan2(yDistance, xDistance);
    }
    Mais le problème c'est que :
    1. je me retrouve avec 2 images de vaisseau : une que je peux seulement bouger au claver et une autre que je peux "tourner" avec la souris
    2. l'image ne suit pas exactement le pointeur...

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Poste le code "complet" pour voir ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Par défaut
    voila le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    public class Game extends JPanel implements Runnable{
     
    	private Player p;
    	private Thread thread;
     
    	public Game(){
     
    		p = new Player();
     
    		thread = new Thread(this);
    		thread.start();
     
    		this.setFocusable(true);
    		this.setBackground(Color.BLACK);
    		this.addKeyListener(new keyListener());
    		this.addMouseMotionListener(new mouseMotionListener());
    		this.setVisible(true);
    	}
     
     
    	public void run() {
    		while(true){
    			p.move();
    			repaint();
     
    			try{
    				thread.sleep(10);
    			}catch(InterruptedException e){
    				System.out.println(e);
    			}
    		}
     
     
    	}
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		Graphics2D g2d = (Graphics2D) g;
     
    		Image imagePlayer = p.getImage();
                    AffineTransform rotation = new AffineTransform();
    		rotation = rotation.getRotateInstance(p.getAngle(),imagePlayer.getWidth(null)/2,imagePlayer.getHeight(null)/2);
     
    		g2d.drawImage(imagePlayer, rotation, null);
     
    		g2d.drawImage(imagePlayer,(int)(p.posX-imagePlayer.getWidth(null)/2),(int)(p.posY-imagePlayer.getHeight(null)/2), this);
    	}
     
     
     
    	public class keyListener extends KeyAdapter{
    		public void keyPressed(KeyEvent e) {
    			p.keyPressed(e);
    		}
    		public void keyReleased(KeyEvent e){
    			p.keyReleased(e);
    		}
     
    	}
     
    	//Class mouseMotionListener
    	public class mouseMotionListener extends MouseMotionAdapter{
    		public void mouseMoved(MouseEvent e){
    			p.rotate(e);
    		}
    	}
     
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
     
    public class Player extends JComponent{
     
    	public float posX, posY;
    	public float speed;
    	private float x, y;
    	private float width, height;
    	private double angle;
    	private Image image;
    	private Boolean leftPress = false, rightPress = false, upPress = false, downPress = false;
     
     
    	public Player(){
    		this.posX = 400;
    		this.posY = 300;
    		this.speed = 3;
    		this.angle = 0;
    		setImage("spaceship.png");
    	}
     
    	public void setImage(String s){
    		try{
    			image=ImageIO.read(new File(s));
    			this.width = image.getWidth(null);
    			this.height = image.getHeight(null);
    		}catch (IOException e){
    			e.printStackTrace();			
    		}
    	}
     
    	public void move(){
    		posX += x;
    		posY += y;
     
    		//collision
    		if(posX < 1) posX = 1;
    		if(posY < 1) posY = 1;
    		if(posX > 800) posX = 800;
    		if(posY > 600) posY = 600;
    	}
     
     
    	public void update() {
    		// Initialisation du déplacement à 0
    		x = 0;
    		y = 0;
     
    		// Déplacement
    		if (leftPress) x = -speed;
    		if (rightPress) x = speed;
    		if (downPress) y = speed;
    		if (upPress) y = -speed; 
    	}
     
    	public float getPosX() {
    		return posX;
    	}
     
    	public float getPosY() {
    		return posY;
    	}
     
    	public float getSpeed() {
    		return speed;
    	}
     
    	public Image getImage() {
    		return image;
    	}
     
    	public double getAngle(){
    		return angle;
    	}
    	public void setAngle(double angle){
    		this.angle=angle;
    	}
     
     
    	public void keyPressed(KeyEvent e){
    		int key = e.getKeyCode();
     
    		switch (key) {
    		case KeyEvent.VK_LEFT :
    			leftPress = true;
    			break;
    		case KeyEvent.VK_RIGHT :
    			rightPress = true;
    			break;
    		case KeyEvent.VK_UP :
    			upPress = true;
    			break;
    		case KeyEvent.VK_DOWN :
    			downPress = true;
    			break; 
    		}
     
    		update(); 
    	}
     
    	public void keyReleased(KeyEvent e) {
    		// Récupération de la touche relâchée
    		int key = e.getKeyCode();
     
    		// Actions & MAJ
    		switch (key) {
    			case KeyEvent.VK_LEFT :
    				leftPress = false;
    				System.out.println("Left released");
    				break;
    			case KeyEvent.VK_RIGHT :
    				rightPress = false;
    				System.out.println("Right released");
    				break;
    			case KeyEvent.VK_UP :
    				upPress = false;
    				System.out.println("Up released");
    				break;
    			case KeyEvent.VK_DOWN :
    				downPress = false;
    				System.out.println("Down released");
    				break; 
    			}
     
    		// MAJ
    		update(); 
    	}
     
    	public void rotate(MouseEvent e){
    		System.out.println(""+e.getX());
    		float xDistance = e.getX() - posX;
    		float yDistance = e.getY() - posY;
    		double angleToTurn = Math.atan2(yDistance, xDistance);
    		this.setAngle(angleToTurn);
     
    	}	
    }

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Je peux déjà te répondre pour le problème 1. En effet dans ton code tu demande d'afficher 2 fois le vaisseau avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g2d.drawImage(imagePlayer, rotation, null);
    g2d.drawImage(imagePlayer,(int)(p.posX-imagePlayer.getWidth(null)/2),(int)(p.posY-imagePlayer.getHeight(null)/2), this);
    ... donc forcement, tu as 2 fois le vaisseau dessiné Il ne faut faire un drawImage qu'une seule fois. Donc translaté, rotaté puis dessiner.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rotation d'une image 2D
    Par FidoDido® dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 29/06/2011, 11h55
  2. Rotation d'une image.
    Par poly128 dans le forum Delphi
    Réponses: 4
    Dernier message: 15/05/2006, 12h26
  3. rotation d'une image
    Par KHEOPS1982 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/12/2005, 17h21
  4. Rotation d'une image TIFF
    Par Tub-95 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 14/10/2005, 20h56
  5. Définir un angle de rotation pour une image
    Par mateo.14 dans le forum C++
    Réponses: 5
    Dernier message: 25/03/2005, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo