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

Moteurs de jeux vidéo Discussion :

AS3 - Gestion de la caméra dans un moteur de jeu vidéo 2D


Sujet :

Moteurs de jeux vidéo

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Flash
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Flash

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut AS3 - Gestion de la caméra dans un moteur de jeu vidéo 2D
    Bonjour tout le monde !

    Je me suis mis à la programmation d'un petit moteur de jeu vidéo 2d, type plateforme, en AS3, et je suis en train de réfléchir sur la meilleure façon de gérer une caméra.

    J'avais programmé un jeu dernièrement, et j'avais géré la caméra en déplaçant tout le niveau. En gros :

    - j'avais une classe Level, et je faisais un addChild du personnage et des entités du jeu.
    - lorsque le personnage bougeait et qu'il atteignait une certaine limite, alors je faisais bouger le niveau en conséquence.

    Mais je ne pense pas que ce soit la meilleure façon de gérer le déplacement d'une "caméra". Je me demandais s'il y avait moyen de déplacer l'écran principal (ce qui affiche ce que l'on voit) plutôt que le niveau, ou autre chose (je ne sais pas si je suis clair sur ce point la).

    Ou alors je rajoute un niveau dans mon architecture, par exemple une classe Screen qui contiendrait mon objet Camera et ma classe Level. Je fixerai la caméra au niveau et j'aurai un attribut target qui correspondrait à l'entité qu'elle suivrait.

    Est-ce une bonne idée ? Comment géreriez-vous une caméra ?

    Nico

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut
    Salut, normalement la camera définie juste l'endroit que le joueur va voir.
    (le principe de la camera...)

    Apres tu peux faire un système de scenegraph comme tu as commence de le faire avec le addChild.
    En gros un objet a deux position, localPosition et position. La position est calcule par l'addition de l'ensemble des positions de ses parents.

    Ça peut être pratique si tu choisis de faire un bateau qui est sous des vagues alors tu translate juste le layer qui contient le bateau et tous ses enfants se déplaceront aussi.

    Dans mon moteur j'ai une classe de base Node dont tous les enfants de la scène hérite. Chaque noeud a ses propres modules.

    Par exemple l’entité gui a un module Physics2D et un module graphique, l’entité physique a un module Physics3D et un module graphique.
    Tu peux aussi faire l'abstraction qui va bien pour ses 2 modules pour ne pas avoir a différencier ces entités.

    Le problème de ce système qui permet de bien structurer et séparer le code c'est que par récursion la classe Node va appeler chacun de ses enfant pour les update et les draw, du coup c'est moins rapide que si tu avais juste une liste d'update et de draw.

    Aussi avec une classe Node pense bien a mettre juste le nécessaire dedans car chaque dérivé héritera de ses attributs du coup niveau mémoire ce n'est pas top.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Flash
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Flash

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse.

    Oui moi j'utilise le système des fonctions updates() appelées par le parent, un peu comme fait XNA je crois, j'aime bien ce principe.

    Ce principe de caméra reste encore flou même après ta réponse, j'ai ptêtre mal formulé ma question aussi.

    Pour l'instant, même avec le système que je viens de penser, ma classe Camera va vérifier la position du joueur, et bouger le niveau en fonction. Mais est ce que c'est possible de rien bouger et de bouger l'écran principal de flash. Je sais pas comment le dire autrement, jsuis pas très bon en vocabulaire technique

    En fait est ce que c'est possible de bouger l'écran d'affichage général, quel que soit le langage de programmation finalement ?

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut
    Salut, oui c'est possible et tu as juste quelques lignes de code a setter normalement.

    C'est sur que c'est galere de deplacer tous son world... et ce n'est pas tres opti..


    En gros tu settes la matrice World et Projection de ta camera puis avec la matrice View, tu settes la position de la camera.

    Pour toi c'est une camera orthographique, j'ai vaguement chercher sur google je n'ai pas trouve l'implementation dans flash et as3 mais je pense que ca existe.

    (Desole je n'y connais pas grand chose en flash...)

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Flash
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Flash

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oulala y'a un peu trop de mots techniques dans ta réponse je suis perdu !

    Ce principe de matrice World et Projection, ca s'applique pas aux moteurs 3d ? La j'utilise flash pour un moteur 2d, tu penses que c'est le même principe ?

    Je vois pas quoi taper sur google pour essayer de trouver des réponses par rapport à ce que tu m'as expliqué (merci d'ailleurs !). Est ce que tu pourrais essayer de m'expliquer un peu plus simplement ?

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut
    Oui c'est sur c'est de la 3D mais le principe reste le meme.

    Tu peux regarder ceci (j'ai trouve ca en googlant un peu)

    http://as3gameprogrammer.wordpress.c...-camera-class/

    La il te fournit une fonction follow.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Flash
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Flash

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci !

    J'ai regardé et en fait il fait bouger le niveau (ce qu'il appelle canvas) en fonction de la position de l'entité. Je me dis qu'en AS3 c'est peut être la seule possibilité qu'on a en fait.

    Dans ce cas je pense que je vais partir sur ce principe alors. J'essaierai de faire en sorte que ce soit pas trop gourmand.

    Mais bon ca m'énerve parce que je suis sûr qu'on peut faire autrement mais j'arrive pas à trouver !

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut
    sinon tu prends un ou deux moteurs de jeu 2d as3 et tu regarde les sources de la classe camera.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Flash
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Flash

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui je suis allé voir comment le moteur flixel fonctionnait. On dirait que c'est le meme principe. Je vais rester sur cette technique je pense.

    Merci pour ton aide en tout cas

Discussions similaires

  1. Intégration dans un moteur de jeu C++
    Par poussinphp dans le forum Lua
    Réponses: 1
    Dernier message: 11/02/2015, 09h57
  2. [Scrum] Le SCRUM dans un développement de jeu vidéo
    Par monjon dans le forum Méthodes Agiles
    Réponses: 1
    Dernier message: 14/12/2011, 14h16
  3. Etre un acteur dans le monde du jeu vidéo : la bonne formule?
    Par SBHR_ dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 15/09/2011, 18h33

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