# Applications > Dveloppement 2D, 3D et Jeux > Moteurs de jeux vido >  AS3 - Gestion de la camra dans un moteur de jeu vido 2D

## Nicotz

Bonjour tout le monde !

Je me suis mis  la programmation d'un petit moteur de jeu vido 2d, type plateforme, en AS3, et je suis en train de rflchir sur la meilleure faon de grer une camra.

J'avais programm un jeu dernirement, et j'avais gr la camra en dplaant tout le niveau. En gros :

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

Mais je ne pense pas que ce soit la meilleure faon de grer le dplacement d'une "camra". Je me demandais s'il y avait moyen de dplacer l'cran principal (ce qui affiche ce que l'on voit) plutt 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 camra au niveau et j'aurai un attribut target qui correspondrait  l'entit qu'elle suivrait.

Est-ce une bonne ide ? Comment greriez-vous une camra ?

Nico

----------


## saturn1

Salut, normalement la camera dfinie juste l'endroit que le joueur va voir.
(le principe de la camera...)

Apres tu peux faire un systme 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 dplaceront aussi.

Dans mon moteur j'ai une classe de base Node dont tous les enfants de la scne hrite. Chaque noeud a ses propres modules.

Par exemple lentit gui a un module Physics2D et un module graphique, lentit 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 diffrencier ces entits.

Le problme de ce systme qui permet de bien structurer et sparer le code c'est que par rcursion 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 ncessaire dedans car chaque driv hritera de ses attributs du coup niveau mmoire ce n'est pas top.

----------


## Nicotz

Merci pour ta rponse.

Oui moi j'utilise le systme des fonctions updates() appeles par le parent, un peu comme fait XNA je crois, j'aime bien ce principe.

Ce principe de camra reste encore flou mme aprs ta rponse, j'ai pttre mal formul ma question aussi.

Pour l'instant, mme avec le systme que je viens de penser, ma classe Camera va vrifier 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 trs bon en vocabulaire technique  ::?: 

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

----------


## saturn1

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...)

----------


## Nicotz

Oulala y'a un peu trop de mots techniques dans ta rponse  :8O:  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 mme principe ?

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

----------


## saturn1

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. ::ccool::

----------


## Nicotz

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 sr qu'on peut faire autrement mais j'arrive pas  trouver  ::evilred::  !

----------


## saturn1

sinon tu prends un ou deux moteurs de jeu 2d as3 et tu regarde les sources de la classe camera.

----------


## Nicotz

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  :;):

----------

