CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : Besoin aide jeux video 2D rpg en JAVA

DébutPage précedente
1
Page suivantePage suivante
epicfailsnip8 epicfailsnip8
MP
Niveau 7
28 mai 2016 à 15:43:46

a l'heur actuel je fait un jeu en java sans bibliotheque et je bloque sur la partie graphique.
le probleme c'est que j'arrive a afficher une map composé de différent "sol" en fonction d'un fichier lu ( si il lit 1 = sable , si 2 = herbe etc etc)

donc j'affiche ma map , mais je ne sait pas comment afficher une personne "en plus" sur la map

epicfailsnip8 epicfailsnip8
MP
Niveau 7
28 mai 2016 à 15:44:02

voila mon code trep moche

class window.java

package linterface;

import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import lemonde.Monde;
import linterface.Grille;

public class Window {

private Monde Monde;
private JFrame fenetre;

public Window (Monde monde){

this.Monde = monde;

fenetre = new JFrame();

//Définit un titre pour notre fenêtre
fenetre.setTitle("RPG game");

//Définit sa taille : 400 pixels de large et 100 pixels de haut
fenetre.setSize(410, 370);

//Nous demandons maintenant à notre objet de se positionner au centre
fenetre.setLocationRelativeTo(null);

//Termine le processus lorsqu'on clique sur la croix rouge
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Et enfin, la rendre visible
fenetre.setVisible(true);

}

public void run(){
Grille grille = new Grille(Monde);
fenetre.getContentPane().add(grille);
fenetre.pack();
fenetre.setVisible(true);
System.out.println("bon");

}

public void chargement(Monde monde){
Grille grille = new Grille(monde);
fenetre.setContentPane((Container) grille.run(monde));
fenetre.pack();
fenetre.setVisible(true);
System.out.println("bon");
}

}

Message édité le 28 mai 2016 à 15:44:28 par epicfailsnip8
epicfailsnip8 epicfailsnip8
MP
Niveau 7
28 mai 2016 à 15:45:20

et la grille .java qui affiche donc la map.

package linterface;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

import lemonde.Monde;

public class Grille extends JPanel {

private Monde Monde;
JPanel panel = new JPanel (new GridBagLayout());
/**
*
*/
private static final long serialVersionUID = 1L;

public Grille(Monde monde){

this.Monde = monde;

this.add(run(Monde),BorderLayout.CENTER);

// this.add(panel);
}

public Component run(Monde monde){

this.setLayout(new BorderLayout()) ;
this.setPreferredSize(new Dimension (500,500));

JPanel panel = new JPanel (new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(0,0,0,0) ;
gbc.fill = GridBagConstraints.BOTH;
gbc.weighty = 1 ;
gbc.weightx = 1 ;
gbc.gridheight = 1 ;
gbc.gridwidth = 1 ;

int ind =0;
int[][] niveau= monde.getmat();

for(int j = 0; j< 10 ; j++){
for(int i = 0; i<10;i++){

// JPanel ptest = new JPanel(new BorderLayout());

if(niveau[j][i] == 1){
ImagePanel ptest = new ImagePanel("image/herbe_Fotor.png") ;
ptest.setSize(new Dimension((this.getPreferredSize().width)/10,(this.getPreferredSize().height)/10));
gbc.gridx = ind/10 ;
gbc.gridy = ind%10 ;
panel.add(ptest, gbc);
}

else if(niveau[j][i] == 2){
ImagePanel ptest = new ImagePanel("image/roche_Fotor.png") ;
ptest.setSize(new Dimension((this.getPreferredSize().width)/10,(this.getPreferredSize().height)/10));
gbc.gridx = ind/10 ;
gbc.gridy = ind%10 ;
panel.add(ptest, gbc);
}
else if(niveau[j][i] == 3){
ImagePanel ptest = new ImagePanel("image/mineral.png") ;
ptest.setSize(new Dimension((this.getPreferredSize().width)/10,(this.getPreferredSize().height)/10));
gbc.gridx = ind/10 ;
gbc.gridy = ind%10 ;
panel.add(ptest, gbc);
}

else if(niveau[j][i] == 4){

ImagePanel ptest = new ImagePanel("image/herbe2.png") ;
ptest.setSize(new Dimension((this.getPreferredSize().width)/10,(this.getPreferredSize().height)/10));
gbc.gridx = ind/10 ;
gbc.gridy = ind%10 ;
panel.add(ptest, gbc);
}

else{
ImagePanel ptest = new ImagePanel("image/herbe_Fotor.png") ;
ptest.setSize(new Dimension((this.getPreferredSize().width)/10,(this.getPreferredSize().height)/10));

gbc.gridx = ind/10 ;
gbc.gridy = ind%10 ;
panel.add(ptest, gbc);
}

ind = ind +1;
} }

return this.add(panel);
}

class ImagePanel extends JPanel {

/**
*
*/
private static final long serialVersionUID = 6271080719238416862L;
private Image img;

public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}

public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(new BorderLayout());
}

public void paintComponent(Graphics g) {
super.paintComponent(g) ;
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);
}

}

}

epicfailsnip8 epicfailsnip8
MP
Niveau 7
28 mai 2016 à 15:45:49

et ma classe qui lance tout ça...

package jeux;

import linterface.Window;
import persos.Hero;
import lemonde.Monde;

public class Jeux {

private static Jeux jeux;

public static void main(String[] args) {

Hero hero = new Hero("Snow",null);

Monde carte = new Monde("demo", 10, 10);

Window window = new Window(carte);

window.run();

System.out.println("Bienvenu " + hero.getnom() +", bonne chance ! ");

//niveau 2
// carte.run(carte.chargement("demo",10,10));
// window.chargement(carte);

}

}

LGV LGV
MP
Niveau 21
28 mai 2016 à 16:08:34

pastebin.com

Avrazu Avrazu
MP
Niveau 10
29 mai 2016 à 00:02:10

Bon c'est un peu horrible à lire donc j'ai juste survolé ton code.

Pour afficher des choses cela se passe là dedans si je ne dis pas de bêtises :

public void paintComponent(Graphics g) {
super.paintComponent(g) ;
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);
}

Après pour afficher un personnage, je suppose un sprite il va falloir que tu déclares une nouvelle image et que tu la dessines dans cette méthode. Je crois que pour superposer le sprite sur le background il faudra déjà afficher le background.

Pour déclarer l'image :

Image img3 = ImageIO.read(getClass().getClassLoader().getResource(LIEN DE TON IMAGE));
g.drawImage(img3, x, y, this);

Avec une exception.

Je sais pas si je t'ai aidé.

Bonne chance j'avais fait un petit jeu comme ça genre shooteur vaisseaux !

epicfailsnip8 epicfailsnip8
MP
Niveau 7
29 mai 2016 à 18:04:49

j'avoue ne pas trop comprendre comment faire , meme si tu as cerné mon probleme

epicfailsnip8 epicfailsnip8
MP
Niveau 7
29 mai 2016 à 18:19:14

Cela permet d'afficher une grille d image mais
A la fin je revoit un truc , je sais pas trop comment l'utiliser pour ensuite a partir du return , afficher par dessus donc un personnage ..
.
===>
.

''' public Grille(Monde monde){

this.Monde = monde;
this.add(run(Monde),BorderLayout.CENTER);
}

public Component run(Monde monde){

this.setLayout(new BorderLayout()) ;
this.setPreferredSize(new Dimension (500,500));

JPanel panel = new JPanel (new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(0,0,0,0) ;
gbc.fill = GridBagConstraints.BOTH;
gbc.weighty = 1 ;
gbc.weightx = 1 ;
gbc.gridheight = 1 ;
gbc.gridwidth = 1 ;

int ind =0;
int[][] niveau= monde.getmat();

for(int j = 0; j< 10 ; j++){
for(int i = 0; i<10;i++){

if(niveau[j][i] == 1){
ImagePanel ptest = new ImagePanel("image/herbe_Fotor.png") ;
ptest.setSize(new Dimension((this.getPreferredSize().width)/10,(this.getPreferredSize().height)/10));
gbc.gridx = ind/10 ;
gbc.gridy = ind%10 ;
panel.add(ptest, gbc);
}
else if niveau === etc etc etc

ind = ind +1;
}
}
return this.add(panel);
}'''

Message édité le 29 mai 2016 à 18:22:25 par epicfailsnip8
Biolixe Biolixe
MP
Niveau 6
29 mai 2016 à 22:37:00

A mon humble avis, le personnage ne doit pas être considéré comme un bloc mais bien comme une entité à part qui sera affichée après la map, stocke juste la position x, y du perso (Faut faire une classe Perso du coup, ou stocker ça dans la classe Map, ce qui est un peu plus sale).

Mack77 Mack77
MP
Niveau 8
31 mai 2016 à 21:38:07

Perso je dessine tout dans mon Graphics, comme Avrazu le montre.
Utilisé des ImagePanel pour faire un jeu, ça me semble être une super mauvaise idée ...

Après, j'pense que tu ferais mieux d'utiliser des librairies dédié aux Jeux Video, typé LWJGL / Slick.
( J'ai une préférence pour LWJGL perso )

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
La vidéo du moment