Description
Cette librairie vous permet de dessiner facilement sur une fenêtre graphique. Vous pouvez télécharger la dernière version ici :
fungraphics-v1.5.6.jar (71,0 KiB, 2 707 hits)
Installation
Les étapes suivantes doivent être réalisées avant de pouvoir exécuter les programmes d’exemple ci-dessous:
- Une fois téléchargé, copier le fichier
fungraphics_<version>.jar
dans le dossier racine de votre projet (au même niveau que le dossier « src » et « bin »). - Dans Eclipse, sélectionner le dossier du projet, puis appuyer sur
F5
(ouFile->Refresh
) pour rendre visible le fichier ajouté. - Bouton droite sur le fichier
fungraphics_<version>.jar
, puis sélectionnerBuild Path->Add to Build Path
.
Documentation
Vous pouvez accéder à la documentation électronique (la Javadoc) ici : FunGraphics Javadoc.
Un exemple simple
Vous trouverez de nombreux exemples dans le répertoire hevs.samples
de l’archive jar
. Pour information, une manière très simple de créer une fenêtre est de suivre le code suivant :
import hevs.graphics.FunGraphics; import java.awt.Color; /** * Draws a simple circle on the screen * @author Pierre-André Mudry */ public class SimpleShapes { public static void main(String[] args) { // Instantiate a new window FunGraphics s = new FunGraphics(300, 300, "Test drawing simple shapes"); // Draw simple shapes s.setColor(Color.black); s.drawCircle(100, 100, 10); s.setColor(Color.blue); s.drawFillRect(20, 20, 10, 10); } }
Liaison avec les touches
Si vous désirez réaliser une application graphique qui réagisse à l’appui de touches comme la barre d’espacement ou les flèches de direction, vous pouvez suivre l’exemple suivant :
import hevs.graphics.FunGraphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; /** * This class demonstrate how to implement keyboard events * using the FunGraphics library. */ public class Demo { int offset = 0; FunGraphics funGraphics; public Demo() { // Inits the graphic window funGraphics = new FunGraphics(640, 480); // Do something when a key has been pressed funGraphics.setKeyManager(new KeyAdapter() { // Will be called when a key has been pressed public void keyPressed(KeyEvent e) { if(e.getKeyChar() == 'a'){ System.out.println("a pressed"); } if(e.getKeyCode() == KeyEvent.VK_RIGHT){ offset++; } } }); while(true) { funGraphics.clear(); //draw our object funGraphics.drawRect(50+offset*2, 50+offset*2, 75, 75); //refresh the screen at 60 FPS funGraphics.syncGameLogic(60); } } public static void main(String[] args) { Demo d = new Demo(); } }
Liaison avec la souris
Si vous désirez réaliser une application graphique qui réagisse à l’appui de touches comme la barre d’espacement ou les flèches de direction, vous pouvez suivre l’exemple suivant :
import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import hevs.graphics.FunGraphics; public class MouseDemo { FunGraphics fg = new FunGraphics(300, 300); MouseDemo(){ fg.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { super.mouseClicked(e); MouseEvent event = e; int posx = event.getX(); int posy = event.getY(); fg.drawFilledCircle(posx, posy, 5); } }); } public static void main(String[] args) { new MouseDemo(); } }
Eviter le clignotement
Si vous avez une animation dans votre jeu, il est possible que votre affichage clignote un peu. Pour éviter ce souci (que je ne peux pas expliquer simplement malheureusement), il faut rajouter dans votre boucle d’affichage le code suivant qui utilise synchronized
:
while (true) { // Rendering (note the synchronized) synchronized (fg.frontBuffer) { fg.clear(Color.white); // Do your drawing in there fg.draw... } /** * Pause for constant frame rate Note how with the rendering thread the method **/ fg.syncGameLogic(60); }
Afficher une image, exemple complet
Il est très facile d’ajouter des images à différents formats (par exemple JPG ou PNG) à l’aide du code suivant. Merci de noter que votre image doit impérativement se trouver dans le dossier SRC et pas ailleurs (le chemin pour instancier le GraphicsBitmap
est relatif au dossier SRC
).
public class ImageAnimation { static void gameloopSample() { FunGraphics fg = new FunGraphics(300, 300, "With thread", true); GraphicsBitmap bm = new GraphicsBitmap("/mandrill.jpg"); double angle = 0.1; double scale = 0.25; double offset = 0.01; while (true) { // Rendering (note the synchronized) synchronized (fg.frontBuffer) { fg.clear(Color.white); int x = fg.getFrameWidth()/2; int y = fg.getFrameHeight()/2-25; // Coordinates X and Y are where to draw the center of the image fg.drawTransformedPicture(x,y, angle, scale, bm); } /** * Pause for constant frame rate Note how with the rendering thread the method * render() should not be called explicitly **/ fg.syncGameLogic(60); // Logic angle += offset; if (angle > Math.PI / 4 || angle <= -Math.PI / 4) { offset *= -1; } } } public static void main(String[] args) { gameloopSample(); } }
Jouer de la musique
Pour player des sons, vous pouvez utiliser la méthode suivante qui permet d’accéder à des fichier WAV uniquement.
import java.net.URL; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; public class AudioPlayer { public Clip audioClip; AudioPlayer(String path) { try { // Create audio input URL url = this.getClass().getClassLoader().getResource(path); AudioInputStream audioStream = AudioSystem.getAudioInputStream(url); // Obtain clip audioClip = (Clip) AudioSystem.getClip(); audioClip.open(audioStream); } catch (Exception e) { e.printStackTrace(); } } void play() { // Open stream and play try { if(!audioClip.isOpen()) audioClip.open(); audioClip.stop(); audioClip.setMicrosecondPosition(0); audioClip.start(); } catch (Exception e) { e.printStackTrace(); } } }