Direction d'une balle

Fermé
Effr - 10 févr. 2016 à 19:03
faseldi Messages postés 279 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 3 janvier 2017 - 11 févr. 2016 à 13:09
Bonjour,

Je voudrais savoir comment, en Java, réaliser la fonction suivante :
- la balle se trouve à une position initiale fixe
- L'utilisateur clique avec sa souris quelque part sur l'écran
- la balle prends cette direction (celle où l'utilisateur a cliqué)

Illustration :
http://img15.hostingpics.net/pics/739670Sanstitre.png

Merci d'avance pour vos réponses, et bonne soirée !

1 réponse

faseldi Messages postés 279 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 3 janvier 2017 20
Modifié par faseldi le 11/02/2016 à 13:28
Bonjour, voilà je t'ai fait un petit code qui devrait faire ce que tu souhaite!


package effr;

import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.event.MouseInputListener;

public class Effr {
private final JFrame frame;
private final Balle balle;
private int depX, depY;
private final int height = 500;
private final int width = 500;
public Effr(){
frame = new JFrame();
frame.setSize(width,height);
depX = 0;depY = 0;
frame.addMouseListener(new MouseInputListener() {

@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
depX = -Math.floorDiv(width,y);
depY = Math.floorDiv(height,x);
depX=depX==0?-1:depX;
depY=depY==0?1:depY;
if(balle.posX < x){
depX=-depX;
}
if(balle.posY > y){
depY=-depY;
}
System.out.println("click!");
}

@Override
public void mousePressed(MouseEvent e) {
}

@Override
public void mouseReleased(MouseEvent e) {
}

@Override
public void mouseEntered(MouseEvent e) {
}

@Override
public void mouseExited(MouseEvent e) {
}

@Override
public void mouseDragged(MouseEvent e) {
}

@Override
public void mouseMoved(MouseEvent e) {
}
});
balle = new Balle(10,10);
frame.add(balle);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
lancerJeu();
}
public void lancerJeu(){
Thread t = new Thread(new Runnable() {

@Override
public void run() {
while(true){
balle.setBallLocation(balle.posX+depX, balle.posY+depY);
try{
Thread.sleep(100);
}catch(InterruptedException e){
break;
}
}
}
});
t.start();
}
private class Balle extends JPanel{
public int posX, posY;
public Balle(int x, int y){
posX=x;
posY=y;
}
@Override
public void paint(Graphics g){
g.clearRect(0, 0, width, height);
g.fillOval(posX, posY, 30, 30);
}
public void setBallLocation(int x, int y){
posX = x;
posY = y;
repaint();
}
}
public static void main(String[] args) {
Effr e = new Effr();
}

}



Bonne journée :)

Edit : j'ai retiré la javadoc qui plantait la balise code de CCM
0