Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3002 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Projet jeu JAVA] Questions de débutant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Projet jeu JAVA] Questions de débutant

n°980680
frankie_fl​owers
Posté le 14-02-2005 à 08:50:08  profilanswer
 

Cette année (2A INSA de Lyon), nous avons un projet java à réaliser, et pensons développer un petit jeu (2D) qui consisterait a controler un perso dévalant une pente et devant éviter les voitures.
 
 
Bien que nous ayons des bases de prorgammation procédurale vues en premiere année, et qu'on ait eu au premier semestre une vague formation à la modélisation grâce à UML, on se retrouve, à l'heure de mettre les mains dans le cambouis un peu pris au dépourvu.
Les idées sont là, mais personne dans le groupe n'a d'expérience en prorgammation objet, les profs nous laissent livrés à nous mêmes, bref on ne sait pas comment se lancer, et surtout quelles solutions utiliser.
 
Nos principales interrogations :
- Pour le design du jeu, est-il envisageable de bosser à partir d'esquisses papier scannées, ou bien vaut-il mieux faire tout directement sous Photoshop ? (ou autre?)
 
- Sur quelles méthodes, classes JAVA, devons nous nous documenter en priorité ? Si vous avez des sources ou de bons tutos, je suis preneur ;)
 
 
N'importe quel conseil général sur la programmation de jeu/JAVA, sera également le bienvenu  :jap:


Message édité par frankie_flowers le 22-05-2005 à 14:31:53
mood
Publicité
Posté le 14-02-2005 à 08:50:08  profilanswer
 

n°980683
FlorentG
Unité de Masse
Posté le 14-02-2005 à 08:59:44  profilanswer
 

Un forum qui devrais t'intéresser : http://www.javagaming.org/cgi-bin/JGNetForums/YaBB.cgi , c'est spécial jeux en java

n°980684
FlorentG
Unité de Masse
Posté le 14-02-2005 à 09:00:28  profilanswer
 

Et sinon, sur http://fivedots.coe.psu.ac.th/~ad/jg/ , y'a des tutorials complets, qui m'ont bien aidé :)

n°980686
sebi
Posté le 14-02-2005 à 09:01:51  profilanswer
 

Une bonne base pour demarrer : www.genuts.com , ils proposent une API tres simple pour rapidement develloper des petits jeux.  
Avant de trop te faciliter la tache avec cette API, je te conseille de regarder un peu les bibliotheques graphiques de java, un petit apercu des threads serait pas mal non plus.  
 
Sinon la ya un tuto (rien a voir avec genuts) : http://www.codebeach.com/index.asp [...] egoryID=11

n°980688
frankie_fl​owers
Posté le 14-02-2005 à 09:08:46  profilanswer
 

:jap: vais me pencher sur tout ça

n°1092387
frankie_fl​owers
Posté le 22-05-2005 à 14:41:36  profilanswer
 

Bon j'up car j'ai pas mal avancé le bidule :)
Je suis parti d'un programme de casse-brique filé par mon prof, et je l'ai modifié peu à peu pour arriver à une ébauche de jeu de voiture vue de haut en 2D.
 
 
Mais j'avance très lentement et je pense que mon code n'est pas très propre, car je suis très souvent stoppé par des erreurs de Unknown symbol et NullPointer.
 
Je crois que je n'ai pas bien saisi certaines bases de JAVA, à savoir :
 
Je veux utiliser une méthode d'un objet B dans une méthode de l'objet C (instance de la classeC).
Faut-il obligatoirement passer l'objet B de la classeB en paramètre de la nouvelle méthode ?

Ou alors il suffit de déclarer l'objet B au debut de la classeC (mais je n'y arrive pas).

n°1092487
Jubijub
Parce que je le VD bien
Posté le 22-05-2005 à 16:15:16  profilanswer
 

oulà ...
 
une lecture de ca s'impose :  
http://java.sun.com/docs/books/tut [...] index.html
 
lis la première partie...tu comprendra pkoi ta question est bizarre...


---------------
Jubi Photos : Flickr - 500px
n°1092490
frankie_fl​owers
Posté le 22-05-2005 à 16:18:47  profilanswer
 

Euh tu me donnes un lien vers une doc complète, je vais mettre des jours à trouver la solution...
 
 
Tu peux essayer de m'expliquer pourquoi ma question est bizarre stp ?

n°1092514
Profil sup​primé
Posté le 22-05-2005 à 16:35:29  answer
 

Si j'ai bien compris ta question tu veux savoir si tu peux déclarer un objet de type B dans une classe C pour pouvoir y accéder au sein des méthodes de ta classe C ? C'est tout à fait possible mais tu es bien obligé à un moment où à un autre de passer cet objet en paramètre à une méthode ou au constructeur de ta classe C.
 
Par contre j'ai dû mal à comprendre comment tu peux "ne pas y arriver" à délcarer l'objet de type B au début de la classe C. Tu sais bien déclarer une champ dans une classe, non ? (si non, voir le lien de Jubijub :))

n°1092528
frankie_fl​owers
Posté le 22-05-2005 à 16:48:12  profilanswer
 

Ok, merci, donc on est bien obligé de passer B en paramètre.
 
C'est ça qui me paraissait tordu :
Si B est l'unique objet de classeB, il faut quand même le passer en paramètre.
 
Exemple

Code :
  1. Class C
  2. {
  3. classeB B;
  4. public void ModifierB()
  5. { B.setText("toto" ); }
  6. }

ne marchera pas
 
 

Code :
  1. Class C
  2. {
  3. public void ModifierB(classeB B)
  4. { B.setText("toto" ); }
  5. }

mais ce code fonctionnera.
 
 
 
J'ai bon ?

mood
Publicité
Posté le 22-05-2005 à 16:48:12  profilanswer
 

n°1092553
kruso
Posté le 22-05-2005 à 17:04:38  profilanswer
 

les deux devraient fonctionner mais il faut penser à bien initialiser ton B (par exemple dans le constructeur de la classe C comme le disait alerim) dans le premier exemple.
 

Code :
  1. Class C
  2.    {
  3.      classeB B;
  4.    
  5.    
  6.      public C(classeB B2)
  7.      {
  8.        B=B2;
  9.      }
  10. /*ou peut-être :
  11.      public void setB(classeB B2)
  12.      {
  13.        B=B2;
  14.      }
  15.    du coup tu devras appeler cette méthode avant de faire un setText*/
  16.      public void ModifierB()
  17.      {
  18.        B.setText("toto" );
  19.      }
  20.    }


Message édité par kruso le 22-05-2005 à 17:14:18
n°1092580
Jubijub
Parce que je le VD bien
Posté le 22-05-2005 à 17:15:07  profilanswer
 

non...
- utilise les conventions de code java...ca rendra ton code plus lisible (nom de variable explicite, en minuscule, si ca contient plusieurs mot, tuLesEcritCommeCa, idem pour les méthodes.
 
pour pouvoir utiliser les méthodes d'un objet, tu dois avoir une référence valide dessus. Cette référence est stockée dans une variable. pour pouvoir utiliser la variable, tu dois etre dans sa portée, cad : n'importe où si c une variable de classe...dans la méthode si c une variable locale...dans le catch ou le if à un niveau encore en dessous...
 
après faut voir où il est pertinent d'initialiser la variable, ici, où acquérir la référence vers l'objet B


---------------
Jubi Photos : Flickr - 500px
n°1092596
frankie_fl​owers
Posté le 22-05-2005 à 17:22:53  profilanswer
 

L'objet B sera donc passé en paramètre du constructeur C() c'est ça ?  (oui j'avais pas vu l'edit)
 
d'autre part, quand on fait un new ClasseA() dans une classe X, l'objet créé est une "member variable" de la classe X, et on est obligé de passer par X pour utiliser l'objet ?
 
(finalement le tuto de Sun est instructif)


Message édité par frankie_flowers le 22-05-2005 à 17:25:29
n°1092600
Jubijub
Parce que je le VD bien
Posté le 22-05-2005 à 17:26:09  profilanswer
 

c un membre de classe à partir du moment où qq part dans ta classe tu as
ClassX taRef = new ClassX(); (si c à la racine de la classe...si c dans une méthode, ce sera une variable locale)
 
et sinon oui, pour initialiser une variable de classe :  
- soit tu l'initialise à la déclaration
- soit tu l'initialise avec un constructeur
- soit tu l'initialiser avec un setter
 
lis vraiment tout le tuto, et regarde la gueule des exemples...c de la base objet ca...c pareil en C++, en python, en java, en C#, et même en VB.net :)


---------------
Jubi Photos : Flickr - 500px
n°1092608
frankie_fl​owers
Posté le 22-05-2005 à 17:29:46  profilanswer
 

Ok j'y vois un peu plus clair (mon erreur est que je croyais qu'un objet une fois créé était accessible de partout grâce à son identifier).
 
Et t'avais raison pour le tuto il a l'air vraiment bien fait :jap:

n°1092818
Jubijub
Parce que je le VD bien
Posté le 22-05-2005 à 20:23:30  profilanswer
 

ah ok ...non il l'est pas, et tant mieux : tu peux donc donner le meme nom de variable à des choses différentes...même au sein d'une même classe...
 
par exemple :  
 

Code :
  1. public class Demo {
  2.     // membre
  3.     private String test;
  4.     public setTest(String test) {
  5.         this.test = test;
  6.     }
  7. }


 
et voilà : 2 nom de variables identique...l'une est préfixée par this, qui indique que c un membre de la classe...si ct super. ce serait un membre de la superclasse ...qd c rien, ca peut aussi etre un membre de la classe, mais si tu précise tu lève l'ambiguité...


---------------
Jubi Photos : Flickr - 500px
n°1093333
frankie_fl​owers
Posté le 23-05-2005 à 14:05:49  profilanswer
 

J'ai une autre question sur un truc plus complexe :
 
 
 

Code :
  1. monCadre.DonnerContenu().setIgnoreRepaint(true);
  2. monCadre.DonnerContenu().DonnerArdoise().setIgnoreRepaint(true);
  3. monCadre.createBufferStrategy(2);
  4. strategy = monCadre.getBufferStrategy();
  5. backBuffer = strategy.getDrawGraphics();
  6. [...]
  7. //appelé par un timer
  8. monCadre.DonnerContenu().Bufferiser(backBuffer, monMur);


 
la fonction bufferiser, appelée toutes les 10ms, fait en gros des g.drawImage (des voitures qui defilent etc...).
 
J'ai essayé d'ajouter un gif animé (route qui défile), à l'intérieur de Bufferiser(), mais ça crée un gros big d'affichage (clignotement).
 
Est-ce possible d'afficher mon fond (gif animé de la route) en dehors de Bufferiser() pour qu'il ne clignote plus.
 
 
 
(je posterai plus de détails ce soir) merci

n°1093492
Profil sup​primé
Posté le 23-05-2005 à 15:17:42  answer
 

Mes conseils qui valent ce qu'ils valent comme tu fais un jeu 2D :
 
- Utilise un JPanel qui gère tout seul le double-buffer.
 
- N'utilise pas de gif animé si tu ne peux pas contrôler à la fois la vitesse de l'animation voire l'arrêter. Ca fait pas propre de laisser java gérer ça sachant que c'est pas fait pour être intégré à un jeu temps réel a priori.
 
- Utilise le schéma classique de boucle principale :
 


while (!gameOver) {
    updateWorld();
    repaintWorld();
    sleep();
}


 
Tu verras que tu auras un meilleur contrôle sur les "animations" de ton jeu et que les problèmes de clignotement n'auront pas lieu d'être.

n°1093621
frankie_fl​owers
Posté le 23-05-2005 à 16:09:11  profilanswer
 

Ok donc la boucle principale rendrait inutile le timer ?
 
sinon pour mon gif animé je réalise bien que c'est " pas propre" mais je tenais vraiment à l'utiliser car j'ai passé 2 heures à le faire  :whistle:


Message édité par frankie_flowers le 23-05-2005 à 16:09:33
n°1093695
Profil sup​primé
Posté le 23-05-2005 à 16:46:49  answer
 

frankie_flowers a écrit :

Ok donc la boucle principale rendrait inutile le timer ?


 
Ben si le sleep est bien programmé, chaque frame devrait durer un temps constant donc tu peux facilement gérer la vitesse de chacune de tes animations. Bon dans ton cas ça sera sûrement pas une précision suisse, mais je pense que ça suffira. :D
 

Citation :

sinon pour mon gif animé je réalise bien que c'est " pas propre" mais je tenais vraiment à l'utiliser car j'ai passé 2 heures à le faire  :whistle:


 
Ton gif n'est pas perdu puisque tu dois pouvoir facilement le décomposer en images distinctes (et les convertir en PNG tant que t'y es :o). Maintenant si Java gère bien les gifs, t'es pas obligé de changer, c'était juste une suggestion.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Projet jeu JAVA] Questions de débutant

 

Sujets relatifs
parser RDF en Javajava.lang.OutOfMemoryError
Debutant CSS definir different sytle pour des cellule de tableau ?Site (portail php) de gestion de projet
Modifier un lien dans un script Java[Java] class static et constructeur
Erreur CaML débutant.Java developer Wanted
donner moi des conseils pr mon super projet de site :d merci ;)[Java] Ajouter une ligne a un Jtable
Plus de sujets relatifs à : [Projet jeu JAVA] Questions de débutant


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR