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

avec Java Discussion :

Déplacement selon une fonction mathématique


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Déplacement selon une fonction mathématique
    Bonjour,
    je suis entrain de développer un jeu sur Java style shoot'em up. Je voudrais que les ennemies suivent un déplacement prédéfinit. Pour cela, soit (x,y) la position d'un ennemie, j'ai décidé d'incrémenter le y (selon la vitesse voulu) pour les faire descendre du haut de l'écran au bas de l'écran, le x se calcule en fonction de y et selon une fonction mathématique choisie.
    Par exemple, j'ai créée un déplacement "diagonal" où les ennemies partent en haut à gauche de l'écran et arrivent en bas à droite de l'écran grâce à une fonction affine (x=a*y+b avec a et b choisie selon la position initiale). En voulant créer des déplacements plus sympas, j'ai essayé de faire partir les ennemies en haut à gauche de l'écran, descendre jusqu'au milieu environs, puis partir à droite de façon horizontale et enfin descendre en bas à droite de l'écran. J'ai donc choisie une fonction à la puissance cubique (x=y^3), le problème est que la répartition des points n'est pas homogène, c'est à dire que lorsqu'on s'approche de 0 il y a beaucoup plus de points que lorsqu'on s'éloigne, ainsi les ennemies avancent plus vite au début et à la fin du trajet mais au milieu ils ralentissent grandement.
    Ma question est donc est-ce qu'il existe une fonction similaire à la fonction puissance cubique mais qui ai une répartition des points homogènes ? Sinon est-ce que vous avez une autre manière de coder le déplacement d'ennemies ?
    Je ne sais pas si ce que j'ai écris et ma question étaient très clair mais si vous ne comprenez pas je peux essayer de réexpliquer d'une manière différente. Ma question est assez général donc je n'ai pas mis d'info sur mon code mais si vous voulez des screenshots ou des bouts de mon code je peux vous les donner.
    Merci d'avance pour votre temps.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    Il existe plusieurs façon plus standard de coder le déplacement des ennemis. La première consiste à définir plusieurs chemin par une succession de "drapeaux" (càd ici de points (x,y)). Ensuite, tu attribues, au hasard ou non, à chaque ennemi un chemin. Ton ennemi n'a alors qu'à se déplacer du point de départ au premier drapeau, puis lorsqu'il l'atteint, il va au suivant, etc. Une autre technique consiste à faire réagir l'ennemi à son environnement. Il va avoir un objectif, mais il sera capable de modifier sa trajectoire s'il rencontre des obstacles. Enfin, il est possible de cumuler les deux pour obtenir une IA du type counter-strike. Il existe évidemment d'autres façon de faire, mais ce sont, je pense, les plus simples à mettre en place pour un débutant.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse.
    Je vois ce que tu veux dire pour le système de drapeau mais est ce que c'est un tableau fixe, c'est à dire une grille de drapeaux (en gros je place un drapeau tous les 5 pixels en abscisse et en ordonné par exemple) puis je sélectionne les drapeaux que je veux pour faire un chemin ou est ce que c'est plutôt dynamique dans le sens où chaque fois que je crée un type de déplacement je lui donne manuellement les drapeaux que l'ennemie va devoir suivre (en gros mes points dépendent de la trajectoire et ils ne seront jamais les même d'une trajectoire à l'autre).
    Une fois les drapeaux mis en place, comment fais tu pour créer de nouveaux chemins pour les ennemies ? Car si je dois donner chaque drapeau à la main cela risque d'être très long et très complexe selon le nombre de drapeaux prédéfinies à la base. Est-il possible de mettre en place une structure qui permettrait de créer facilement de nouveaux chemin, par exemple j'affiche la grille de drapeaux, je fais le chemin en survolant les drapeaux avec la souris, cela enregistre le parcours et je peux ensuite l'utiliser comme type de déplacement d'un ennemie.
    En tout cas ce type de programmation a l'air beaucoup plus efficace car là je pourrais avoir une homogénéité de mes points (c'est à dire que je pourrais les faire à intervalles égaux) et je pourrais ajouter de la complexité par dessus comme tu le suggères.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    Ben tout est possible. Par contre, la question c'est le temps que tu vas y passer... ^^

    Toutes les méthodes sont bonnes pour placer les drapeaux. Tu peux les rentrer à la main, tu peux utiliser une fonction mathématiques, des boucles, ou encore comme tu dis, créer un petit éditeur où tu utilises un MouseListener pour générer des chemins que tu enregistres dans un fichier. Dans ton programme principal, tu charges simplement les chemins depuis ce même fichier. Ca évite de tout taper à la main.

    Evidemment la solution la plus rentable à terme c'est la solution où tu crées un éditeur, mais c'est aussi un peu plus technique. A toi de voir.

Discussions similaires

  1. déplacement selon une trajectoire sinusoïdale ?
    Par WhiteTigerZ dans le forum Flash
    Réponses: 1
    Dernier message: 14/10/2007, 14h42
  2. Transcrire une fonction mathématique en code Matlab
    Par casper84 dans le forum MATLAB
    Réponses: 1
    Dernier message: 30/03/2007, 17h04
  3. Tracer ellipse à partir d'une fonction mathématique
    Par juli1_h dans le forum Mathématiques
    Réponses: 2
    Dernier message: 13/03/2007, 09h43
  4. codage du calcul de dérivée d'une fonction mathématique
    Par pispa2005 dans le forum Mathématiques
    Réponses: 5
    Dernier message: 08/01/2005, 20h54
  5. Créer une fonction mathématique pendant l'exécution
    Par zeprogrameur dans le forum Langage
    Réponses: 5
    Dernier message: 09/07/2004, 11h36

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