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

Silverlight Discussion :

Un moteur de scrolling


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Par défaut Un moteur de scrolling
    Salut à tous,

    Je me suis penché récemment sur la création de moteurs de scrolling "fluides" (j'entends par là pas tile par tile, mais avec un défilement progresif) avec Silverlight : le premier pour un jeu type Advance Wars et le second pour un jeu en 3d isométrique dont les tiles sont des losanges (vues de biais donc).

    Evidement, par curiosité, j'ai commencé par regarder comment le moteur de dobbschallenge2 etait implémenté, et le moins que l'on puisse dire, c'est qu'il ne fait pas dans la dentelle : au chargement de la map, on crée autant d'instances de Rectangle qu'il y a de tiles, on met tout ca sur un Canvas et on met les coordonnées du Canvas à jour au gré du déplacement de la caméra, le clipping faisant le reste.

    La solution pour laquelle j'ai opté est un peu plus élégante : j'ai (largeurDeLecranEnTiles+1)*(longueurDeLecranEnTiles+1) tiles (le +1 étant lié au fait que le défilement est, comme je l'ai dit, progressif et donc qu'on peut ne voir qu'une partie de certaines tiles) que je place sur un Canvas : si, après déplacement, les coordonnées de la camera ne sont pas un multiple de la taille de tile, je me contente de déplacer légèrement le canvas dans la direction souhaitée, sinon je replace le Canvas en (0,0) et je met à jour l'apparence de tous mes Rectangles selon les tiles qu'il représentent : l'avantage c'est que quelque soit la taille de la map, j'ai toujours un nombre fixe de Rectangles gérés et un occupation mémoire moindre. Certes je me sers aussi du clipping, mais sur un nombre de Rectangle beaucoup plus modeste.

    L'implémentation pour le moteur type advance war s'est faite en quelques minutes et fonctionne du tonnerre, mais l'implémentation de la version 3d isométrique est un peu plus délicate du points de vue de l'algorithmique (faut que je me triture les méninges pour savoir le nombre de rectangles à générer, selon la largeur des tiles qui n'est pas forcément multiple de la taille écran etc etc...) alors que la version bourrines ou je crée toutes mes tiles que je place sur un Canvas à la dobbschallenge est... complètement triviale à implémenter.

    D'où ma question : au dela de la volonté de sortir un code propre, cela vaut il le coup que je me casse la tête à ce point ? Parce que bon les objets manipulés restent quand même extrêmement simples, alors est ce que j'y gagne réellement : n'est il pas plus rapide, niveau perf, de laisser Silverlight clipper l'ensemble des tiles plutôt que de chercher à modifier la propriété Fill de mes Rectangle avec la Brush adéquate chaque fois que cela s'avère nécessaire.

    Je ferais bien un peu de profiling, pour voir mais si la réponse est évidente et en faveur de la méthode bourrin je m'économiserais cette peine

    (même si je me doute évidement qu'avec une map immense les résultats joueront en ma faveur, mais bon je en pense pas développer un jeu avec des cartes de millions de tiles).

    Merci

    PS : Pour voir à quoi ca ressemble, créez une page html en local avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <iframe src="http://silverlight.services.live.com/invoke/101387/ScrollingAW/iframe.html" scrolling="no" frameborder="0" style="width:320px; height:240px"></iframe>
    (les graphismes sont ceux d'AW, ca se controle avec les touches fléchées)

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Eh ben j'ai rencontré le même problème que toi.

    J'ai développé il y a quelques temps (projet en suspens) un jeu basé en grande partie sur l'affichage d'une map.

    Notre première idée avait été de charger tout la map en mémoire, soit 100*100 tiles, idée abandonnée rapidement. Puis est venue la même idée que toi chargée la map en 10*10 et modifier les images en fonction du déplacement.

    J'ai alors pensé à charger une map de 10*10 + 4 de chaque côté, le 4 étant pour les parties non visibles (2 et 2 de chaque côté).

    La map étant isometrique, le résultat était assez correct.

    Donc ma réponse à ta question, est oui ta gestion me parait assez bien et assez fluide.

Discussions similaires

  1. moteur de particules :Dessiner un point
    Par houssa dans le forum OpenGL
    Réponses: 2
    Dernier message: 25/06/2003, 22h13
  2. le fameux scrolling
    Par tanmieu dans le forum DirectX
    Réponses: 4
    Dernier message: 27/05/2003, 23h25
  3. scrolling vertical et horizontal
    Par myriam dans le forum MFC
    Réponses: 2
    Dernier message: 24/01/2003, 17h06
  4. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41
  5. scroll dans un label
    Par Pretender dans le forum Composants VCL
    Réponses: 9
    Dernier message: 27/09/2002, 17h06

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