IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Collision 2D RPG


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 34
    Par défaut Collision 2D RPG & interface Shape
    Bonjour,
    je fais actuellement un rpg 2D vu de haut ( sans système de case par case ) et j'aimerais savoir comment définir les zones où le personnage ne peut pas accéder.

    Le déplacement du personnage se fait par un changement de repère.

    J'ai pensé mettre une grande image de fond pour la carte et une autre image avec les objets inaccessibles et dont les zones transparentes ( où on voit donc la première image ) seraient accessibles.

    La seconde solution ( avec plein d'images dessinées les unes à côté des autres ) aurait été de vérifier à chaque instant où le personnage bouge si l'image où il arrive est accessible.


    Avez-vous d'autres solutions? La première est-elle réalisable?

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 34
    Par défaut
    Problème résolu par la 1ère méthode et l'ajout d'une 3ème couche pour dessiner le personnage sous le haut des maisons et arbres.

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Ta solution fonctionne en effet parfaitement.

    Generalement et traditionnellement on utilise une image dediee, un masque en N&B ou en deux couleurs (voir BufferedImage.TYPE_BYTE_BINARY) qui defini les zones accessibles dans l'image de fond. Idem la plupart des sprites ont des masques qui leur sont associes pour definir les zones qui ne ne comptent pas pour les collisions (ex bidon : la cape du perso qui flotte au vent).

    Egalement, de nos jours, tu peux te creer une editeur qui te permet de dessiner des formes geometriques sur le fond, de les stocker dans un fichier texte et ensuite d'utiliser l'interface Shape pour determiner si le perso peut aller dans ces zones ou pas. Ca a probablement le merite de bouffer moins de memoire qu'une image dediee.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 34
    Par défaut
    Je me disais aussi que la RAM utilisé par l'application augmenté rapidement avec l'utilisation d'images dédiées.

    Actuellement, lors d'un déplacement la méthode géodata() est appelé presque 500 fois par seconde pour analyser les points d'un ovale qui représente le socle du sprite et cherche si il y a de la couleur en ces points :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	public void geodata()
    	{
    		int rgb= bufferedImageInnaccessible.getRGB((int) xGeo,(int) yGeo);
    		int rouge = (rgb >>16) & 0xFF;
    		int vert = (rgb >> 8) & 0xFF;
    		int bleu = rgb & 0xFF;
    		if (rouge != 0 | vert != 0 | bleu != 0) {xPerso -= dx; yPerso -= dy; dx=0; dy=0;}
    	}
    Pourtant malgré ce nombre l'UC n'est pas fortement utilisé (2-3%) et les déplacements sont fluides.
    Si il existe une solution qui prend moins de RAM, moins de calculs et tout aussi efficace je suis preneur.


    Je dispose justement d'un Éditeur maison permettant de créer des cartes pour cette application. Avec l'interface Shape les déplacements seront-ils toujours aussi fluides, la RAM/UC sera-elle diminué ?

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Justement quel type utilises-tu pour tes images masque ? Car TYPE_INT_RGB ou TYPE_INT_ARGB c'est quand meme 4 octets par pixel.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 34
    Par défaut
    Le TYPE_INT_RGB.

    Si j'augmente la taille de l'image ( 380 ko -> 980 ko ), la RAM utilisé par l'application passe de 200 mo vers 460 mo.

Discussions similaires

  1. algorithme de collision 3D
    Par chetropinchuste dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/02/2010, 13h16
  2. [java3D][collision]
    Par geofun dans le forum 3D
    Réponses: 7
    Dernier message: 12/02/2007, 14h49
  3. Test de collision en 2D
    Par GLDavid dans le forum OpenGL
    Réponses: 5
    Dernier message: 12/02/2004, 10h12
  4. Gestion des collisions - terrains
    Par Dranor dans le forum DirectX
    Réponses: 1
    Dernier message: 26/06/2003, 18h50
  5. test collisions
    Par tatakinawa dans le forum OpenGL
    Réponses: 5
    Dernier message: 08/06/2002, 06h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo