Questions de débutant [Projet jeu JAVA] - Java - Programmation
Marsh Posté le 14-02-2005 à 08:59:44
Un forum qui devrais t'intéresser : http://www.javagaming.org/cgi-bin/JGNetForums/YaBB.cgi , c'est spécial jeux en java
Marsh Posté le 14-02-2005 à 09:00:28
Et sinon, sur http://fivedots.coe.psu.ac.th/~ad/jg/ , y'a des tutorials complets, qui m'ont bien aidé
Marsh Posté le 14-02-2005 à 09:01:51
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
Marsh Posté le 22-05-2005 à 14:41:36
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).
Marsh Posté le 22-05-2005 à 16:15:16
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...
Marsh Posté le 22-05-2005 à 16:18:47
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 ?
Marsh Posté le 22-05-2005 à 16:35:29
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 )
Marsh Posté le 22-05-2005 à 16:48:12
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 :
|
ne marchera pas
Code :
|
mais ce code fonctionnera.
J'ai bon ?
Marsh Posté le 22-05-2005 à 17:04:38
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 :
|
Marsh Posté le 22-05-2005 à 17:15:07
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
Marsh Posté le 22-05-2005 à 17:22:53
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)
Marsh Posté le 22-05-2005 à 17:26:09
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
Marsh Posté le 22-05-2005 à 17:29:46
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
Marsh Posté le 22-05-2005 à 20:23:30
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 :
|
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é...
Marsh Posté le 23-05-2005 à 14:05:49
J'ai une autre question sur un truc plus complexe :
Code :
|
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
Marsh Posté le 23-05-2005 à 15:17:42
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 :
|
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.
Marsh Posté le 23-05-2005 à 16:09:11
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
Marsh Posté le 23-05-2005 à 16:46:49
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.
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 |
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 ). Maintenant si Java gère bien les gifs, t'es pas obligé de changer, c'était juste une suggestion.
Marsh Posté le 14-02-2005 à 08:50:08
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
Message édité par frankie_flowers le 22-05-2005 à 14:31:53