Crunchez vos adresses URL
|
Rejoignez notre discord
|
Hébergez vos photos
Page 11 sur 15 PremièrePremière ... 3456789101112131415 DernièreDernière
Affichage des résultats 301 à 330 sur 448
  1. #301
    Le coup de 3D "plate" c'est juste une question de liberté de mouvement de la caméra non ? Tu ne la déplaces que sur un plan et pas sur 3 axes. Pour le reste, je vois pas de différence avec de la 3D "normale", mais je m'intéresse surtout à la 2D.

  2. #302
    Oui c'est ça. En gros je ne veux pas avoir à gérer les dénivelés. La gestion de collision devient très simple puisque je ne traite ca plus qu'en 2D (vu de dessus à la google-earth). J'ai dans l'idée d'avoir un maillage en 2D, certaines cellules donnent accès à un autre maillage toujours en 2D (escalier vers grotte etc.).

    Je ne sais pas si je suis clair.
    Anatidaephobia : Peur panique quand un canard t'observe

  3. #303
    Citation Envoyé par Entropie Voir le message
    Dis Monsieur Sébum,

    Tu n'aurais pas plus de screen sur ton projet de jeu 3D avec XNA ? Autant en 2D j'ai pas mal avancé sur mes tests, autant pour ce qui est la 3D j'ai beaucoup moins de source et j'aimerai voir ce que ça permet de faire.
    Plus de screens ? Pas encore. En temps voulu.
    XNA permet de faire n'importe quoi. Même si ce n'est pas d'aussi bas niveau que le combo C++/DirectX, c'est quand même assez low-level. Si tu peux le programmer, tu peux le faire.

    Sinon, pour la 3D sous XNA, ce site m'a tout appris, il y a même un petit moteur de FPS en kit :

    http://www.dhpoware.com/demos/index.html (descendre sur la page aller à la section XNA)

    Note que pour de la 3D simple, utiliser la classe BasicEffect (cherche "XNA basiceffect" sur Google) permet de ne pas avoir à se fatiguer avec les shaders.

    Concernant ton projet, au niveau affichage, faire de la "3D plate" est aussi complexe (ou aussi simple, selon les points de vue) que de faire de la "vraie 3D". Par contre ça simplifie ÉNORMÉMENT les choses au niveau pathfinding/détection de collisions. La détection de collisions dans un vrai univers sur 3 axes est archi-pénible.
    Dernière modification par L-F. Sébum ; 16/02/2012 à 18h48.

  4. #304
    Merci beaucoup ! Je vais regarder ça attentivement.

    Je suis super bluffé par XNA. J'ai fait un modèle daubic sous blender, export fbx, et zou glissé-déposé dans mes contents : basta. Je suis tombé sur des tutoriels pour débutant pas trop mal faits ici : http://sebastiencourtois.wordpress.com/category/xna/ celui sur "Modèles 3D et gestion de la lumière" est assez bien foutu pour débuter.
    Anatidaephobia : Peur panique quand un canard t'observe

  5. #305
    Dans le chapitre 7 des écrits de Louis-Ferdinand Sébum il est écrit :
    Tout d'abord dessiner les tirs, ce qui se fait en deux lignes dans la fonction Draw() :
    En fait ça ne se fait pas n'importe où dans la fonction Draw, comme j'ai pu m'en rendre compte, mais entre les spriteBatch.Begin() et spriteBatch.End() bien sûr.
    j'avais bêtement mis les deux lignes à rajouter à la toute fin de la fonction Draw, ce qui est idiot mais j'ai mis longtemps à comprendre mon erreur. Si ça peut aider.

    LFS Most Wanted.

    PS. Juste une question en passant. Quand on enfonce trois touches (deux Flèches de direction et la barre d'espace) le tir ne se fait pas sauf avec la combinaison Haut+Droite+Espace. Il y a une raison à ça ? Ou c'est mes yeux ?
    Dernière modification par Djinn42 ; 18/02/2012 à 22h04.
    ¯\_(シ)_/¯ ♫♪♪♫ .......d(oO)b....... ♫♪♪♫ ¯\_(ひ)_/¯

  6. #306
    Citation Envoyé par Djinn42 Voir le message
    Dans le chapitre 7 des écrits de Louis-Ferdinand Sébum il est écrit :

    Tout d'abord dessiner les tirs, ce qui se fait en deux lignes dans la fonction Draw() :
    En fait ça ne se fait pas n'importe où dans la fonction Draw, comme j'ai pu m'en rendre compte, mais entre les spriteBatch.Begin() et spriteBatch.End() bien sûr.
    j'avais bêtement mis les deux lignes à rajouter à la toute fin de la fonction Draw, ce qui est idiot mais j'ai mis longtemps à comprendre mon erreur. Si ça peut aider.
    Et voilà, ça devait finir par arriver. J'essaye de faire en sorte qu'il n'y ait aucune ambiguïté tout en écrivant des leçons assez courtes pour qu'elles rentrent sur une page de Canard PC. Il fallait bien qu'un truc finisse par m'échapper.

    Donc, comme le dit Djinn42, toutes les instructions de dessin passées à spriteBatch doivent se trouver entre spriteBatch.Begin() et spriteBatch.End().

    Citation Envoyé par Djinn42 Voir le message
    PS. Juste une question en passant. Quand on enfonce trois touches (deux Flèches de direction et la barre d'espace) le tir ne se fait pas sauf avec la combinaison Haut+Droite+Espace. Il y a une raison à ça ? Ou c'est mes yeux ?
    Je n'ai pas le code sous les yeux donc je te répondrai demain.

    A priori, si le problème ne vient pas de tes yeux, c'est une histoire de "if... else if".

    C'est la seule explication rationnelle en tout cas.

  7. #307
    Citation Envoyé par [dT] Moustik Voir le message
    Tout est disponible sur la première page de ce topic.
    J'ai bien saisi le code source et tout mais j'aurais aimer suivre en pas à pas comme si j'avais eu les numéros un par un. Surtout avec les instructions contenu dans les canards ^^. S'il s'agit de faire le différentiel entre les différentes étapes du projet, on est moins dans l'apprentissage que dans le dépannage ^^

    Là, j'ai récupéré le projet0 et j'ai lancé l'application... Un bel écran bleu ciel sans objet et sans événement ^^. Que faire ensuite ?

  8. #308
    Tu rachètes les numéros de CanardPC que tu n'as plus :cherche-à-bien-se-faire-voir-par-la-rédac:
    Rust fanboy

  9. #309
    J'ai regardé mais la plupart sont en rupture Quelqu'un pourrais scanner les pages "développez couché" si cela n'est pas trop dommageable au canard ?
    Dernière modification par jayr0m ; 20/02/2012 à 14h10.

  10. #310
    Moi je dis une application sur ios

  11. #311
    Citation Envoyé par jayr0m Voir le message
    J'ai regardé mais la plupart sont en rupture Quelqu'un pourrais scanner les pages "développez couché" si cela n'est pas trop dommageable au canard ?
    On va mettre un truc en place d'ici peu pour ceux qui ont raté des leçons (et pas uniquement sur iPad, rassurez-vous).
    Dernière modification par L-F. Sébum ; 20/02/2012 à 16h11.

  12. #312
    Sur Kindle aussi ?
    ¯\_(シ)_/¯ ♫♪♪♫ .......d(oO)b....... ♫♪♪♫ ¯\_(ひ)_/¯

  13. #313
    Petite question, je viens de jeter un oeil à la solution. Pour quitter,
    Code:
    GamePad.GetState(PlayerIndex.One).Buttons.Back
    ...
    Otez moi d'un doute, on dev pour Xbox là, non ? ^^ Sous Seven, je vois pas quelle touche permet de sortir ^^

  14. #314
    Citation Envoyé par jayr0m Voir le message
    Sous Seven, je vois pas quelle touche permet de sortir ^^
    Alt+F4

  15. #315
    Citation Envoyé par L-F. Sébum Voir le message
    Alt+F4
    Forcément, vu comme ça... :D

  16. #316
    Citation Envoyé par Tomaka17 Voir le message
    Tu rachètes les numéros de CanardPC que tu n'as plus :cherche-à-bien-se-faire-voir-par-la-rédac:
    et ouai c'est ce que je fait pour ma part (il me manquait 2 numéros)... puis je me suis abonné pour éviter d'en rater un autre... bref bien joué Sebum...
    Dernière modification par Vogel ; 23/02/2012 à 10h42.

  17. #317
    Héhé, c'est donnant-donnant, un de ces jours c'est lui qui vous remerciera d'avoir développé la nouvelle perle indé du moment.

  18. #318
    À propos de perle indé, ça serais possible de rejoindre un projet en cours ? Je manque un peu d'imagination et tout seul, sans aucun talent artistique, je manque un peu de créativité...

  19. #319
    Bonjour. :-)
    Il y a pleins de demandes sur Elvos.org.
    Vite, avant que le site ne ferme ! :-(

  20. #320
    Hello,

    super idée ce "Développez Couché" ! Mais je trouve un peu frustrant de devoir attendre 2 semaines pour la (trop petite ! ) suite !
    Dans la leçon 8, je crois qu'il faut conserver la ligne
    tirs[i] = new Vector2(tirs[i].X+8,tirs[i].Y);
    dans le code modifie pour détecter les collisions tir*saucisse.

    En tout cas, c'est super de voir ce qu'il y a derrière un jeu !
    Pour passer le temps entre les mags, j'essaye des petits trucs: j'aimerais ajouter des collisions avec le sol qui défile (avec des montagnes, des creux ...). J'imagine qu'il faudrait une sorte de tableau qui donnerait pour chaque valeur de x du sol la "hauteur" (y) du sol (en gros, la courbe sous excel de ce tableau aurait la forme du relief qui défile à l'écran), et tester si la hauteur du joueur est bien supérieure à la hauteur du sol à l'endroit où il se trouve.
    Facile de créer un tel fichier texte à 2 colonnes (les x et y), mais comment le lire au début du programme ?

    Si quelqu'un a une idée, merci !

    Et vivement la leçon 9 !

  21. #321
    Plutôt que de donner la valeur y pour chaque valeur possible de x, il est plus simple et plus rapide de donner cette valeur qu'aux endroits où le décor fait un angle
    Par exemple quand x=30,y=10 et quand x=100,y=20, mais tu ne donnes aucune valeur intermédiaire
    Et quand le vaisseau est à la position 65 par exemple, tu fais une moyenne pondérée des deux valeurs de y autour : 10 + (20-10) * (65-30)/(100-30)

    Ensuite je te conseille d'abord de créer un tableau pré-rempli de ces valeurs à l'intérieur du programme, de façon à ce que tu puisses tester si ça fonctionne
    Une fois que tu es sûr que tout marche, à ce moment là seulement tu essayes de les charger depuis un fichier

    Enfin pour les charger depuis un fichier, si tu veux le faire depuis Excel, tu peux ensuite exporter au format CSV
    Après pour charger ça dans ton programme, je n'ai jamais codé en C# donc je saurais pas te pondre un code, mais ça doit être relativement simple (cherche du côté de "lire un fichier ligne par ligne" et "split un string", mais il y a peut être même des fonctions C# qui te permettent de lire directement du CSV)
    Dernière modification par Tomaka17 ; 02/03/2012 à 13h35. Motif: on aurait dit que j'étais bourré en écrivant
    Rust fanboy

  22. #322
    Citation Envoyé par strat62 Voir le message
    En tout cas, c'est super de voir ce qu'il y a derrière un jeu !
    Pour passer le temps entre les mags, j'essaye des petits trucs: j'aimerais ajouter des collisions avec le sol qui défile (avec des montagnes, des creux ...). J'imagine qu'il faudrait une sorte de tableau qui donnerait pour chaque valeur de x du sol la "hauteur" (y) du sol (en gros, la courbe sous excel de ce tableau aurait la forme du relief qui défile à l'écran), et tester si la hauteur du joueur est bien supérieure à la hauteur du sol à l'endroit où il se trouve.
    Facile de créer un tel fichier texte à 2 colonnes (les x et y), mais comment le lire au début du programme ?

    Si quelqu'un a une idée, merci !
    Quelques possibilités globalement :
    - faire un tableau de pixels du sol. Non seulement tu vas galérer sur le côté dynamique (tableau de quelle taille ?), mais aussi galérer à le créer la première fois (énormément de données), et galérer à le maintenir quand tu feras des updates.
    - faire une tilemap du sol. Mêmes problèmes qu'avec la première méthode, mais moins violemment parce qu'au lieu de stocker la hauteur de chaque pixel, tu utilises des blocs de par exemple 50 pixels de côté. Ca demande par contre de designer le tileset puis de gérer le chargement des différentes tuiles (à moins de n'utiliser que des carrés de couleur unie que tu dessines à la volée).
    - faire un sol qui a une forme qui répond à une formule mathématique. Là, suffit de tester if (y <= formule) then BOUM.
    - utiliser une vraie détection de collision. C'est la solution la plus puissante et la plus difficile à mettre en place si tu débutes (en plus de bouffer beaucoup de ressources si c'est pas propre). Il y a plusieurs méthodes, par exemple "pixel perfect collision detection", très (très) lourde mais qui s'adapte à toutes les situations, qui consiste à comparer chaque pixel du PJ à chaque pixel du sol sur l'ensemble de la surface de dessin du PJ.
    La détection de collision est une des questions qui revient le plus sur les forums de développement de jeu vidéo. Il existe plein de méthodes, plus ou moins précises et gourmandes en ressources ; il faut donc choisir celle qui sera adapté au type de jeu. Par exemple sur un shoot'em up, la précision est un point important. Mais sur un SMU avec 300 tirs à l'écran, faudra probablement faire un compromis pour pas avoir une demi-seconde de calcul à chaque cycle.

    Petit lexique :
    PJ : le personnage joué par le joueur, ici le lapin
    tileset : un ensemble de tuiles (tiles) carrées, toutes de même taille, qui représentent chacune un élement du décor. Par exemple un carré de sol, un de mur, un de route. Pour info, les Mario en 2D utilisent aussi des tilesets, c'est la raison pour laquelle les buissons ont la même forme que les nuages (on peut utiliser la même tile en changeant juste la couleur). L'idéal pour comprendre le fonctionnement est d'utiliser l'éditeur de map d'un vieux STR 2D style Warcraft2 ou les vieux Command & Conquer/Red Alert.
    tilemap : un tableau en 2 dimensions qui représente le monde. Chaque case fait référence à une tile du tileset.
    Exemple :
    Code:
    ##R##
    ##R##
    ##RRR
    Avec # un carré d'herbe, et R de route. Ca nous donne une route en forme de 'L' sur un fond d'herbe.
    Dernière modification par LaVaBo ; 02/03/2012 à 14h17.

  23. #323
    Merci Tomaka et LaVaBo,

    je me rend mieux compte de la difficulté de la chose (mais je n'abandonne pas !)
    LaVaBo : quand tu dis "utiliser la vrai détection de collision au pixel près", ça n'est pas une 4eme possibilité en plus des (1) tableau des pixels du sol", (2) tilemap du sol, (3) formule mathématique, si ? Pour comparer chaque pixel du PJ à chaque pixel du sol, ça suppose déjà de connaitre les pixels de la surface du sol, par une des 3 solutions précédentes ? C'est "juste" une solution plus précise que de tester si 2 rectangles (ou cercles) se touchent, c'est cà ?

  24. #324
    En fait tu as deux grandes catégories de possibilités :
    - soit tu détectes la collision en faisant des calculs mathématiques, comme pour ton idée de x,y ou comme dans un moteur physique qu'on trouve dans un jeu triple A
    - soit tu compares des images, par exemple tu superposes l'image du vaisseau du joueur et l'image du sol, et tu regardes si le vaisseau du joueur recouvre un pixel non-transparent de l'image du sol

    La première solution a l'inconvénient de rendre les choses plus longues à modifier. Si plus tard tu décides de modifier le sol pour rajouter une montagne par exemple, il faudra en plus modifier les données de collision.
    Mais la deuxième a l'inconvénient de n'être utilisable que dans les jeux en 2D. La deuxième a également l'avantage d'être optimisable grâce à la carte graphique (c'est à dire qu'elle dessine et en même temps elle regarde si tu touches, ça fait 2 en 1), même si aujourd'hui nos machines sont tellement rapides que ce genre d'optimisation c'est de l'enculage de mouche


    Hors-sujet :
    À noter que dans la deuxième solution, tu peux aussi créer une deuxième image qui sert de masque de collision.
    Par exemple j'ai choppé ça via google images :



    L'image à gauche est utilisée pour dessiner le perso à l'écran, et l'image à droite est utilisée pour tester les collisions. Tu peux modifier l'image de droite sans toucher à celle de gauche, comme ça certaines parties du corps du perso seront insensibles. Tu peux même mettre différentes couleurs (par exemple la tête en rouge, le corps en jaune, les pieds en vert, etc.) afin de déterminer précisément où tu as été touché et ainsi adapter les dégâts (par exemple si tu touches une zone rouge, c'est la tête, et donc dégâts x2)

    Retour au sujet :
    Mais la solution la plus simple à coder je pense c'est encore celle que j'ai évoquée plus haut et qui est proche de celle que tu as proposée toi même : créer un tableau où tu indiques les positions des angles du sol
    Dernière modification par Tomaka17 ; 02/03/2012 à 15h44.
    Rust fanboy

  25. #325
    Bonjour.
    Pour les formules mathématiques, il est facile d'avoir la forme de la courbe, et donc son dessin, en partant de la formule, avec les calculatrices graphiques virtuelles.
    Dernière modification par RedGuff ; 03/03/2012 à 16h50. Motif: Orth.

  26. #326
    Je crois qu'il y a un oubli dans le dernier Développez Couché :

    Code:
    for (int i = 0; i < tirs.Count; i++)
                {
                    
                    Rectangle tirRect = new Rectangle();
    
                    for (int j = 0; j < 4; j += 1)
                    {
                        
                        tirRect = new Rectangle((int)tirs[i].X, (int)tirs[i].Y, 128, 64);
    
                        if (tirRect.Intersects(new Rectangle((int)saucisses[j], j * 125, 128, 64)))
                        {
                            saucisses[j] = 800 + aleatoire.Next(800);
                            mechanteSaucisse[j] = (aleatoire.NextDouble() < 0.5);
                            break;
                        }
                    }
                }
    Si on ne rajoute pas cette ligne : tirs[i] = new Vector2(tirs[i].X + 8, tirs[i].Y);
    les tirs ne vont pas bouger et rester fixe sur l'écran.

    Du coup, ça donne ça :

    Code:
    for (int i = 0; i < tirs.Count; i++)
                {
                    tirs[i] = new Vector2(tirs[i].X + 8, tirs[i].Y);   ///Juste ici
                    Rectangle tirRect = new Rectangle();
    
                    for (int j = 0; j < 4; j += 1)
                    {
                        
                        tirRect = new Rectangle((int)tirs[i].X, (int)tirs[i].Y, 128, 64);
    
                        if (tirRect.Intersects(new Rectangle((int)saucisses[j], j * 125, 128, 64)))
                        {
                            saucisses[j] = 800 + aleatoire.Next(800);
                            mechanteSaucisse[j] = (aleatoire.NextDouble() < 0.5);
                            break;
                        }
                    }
                }
    Member of the United Colors of Canards
    Citation Envoyé par crAsh Voir le message
    Le but ici, c'est de s'amuser, se détendre, se chambrer, et dire à Nearo qu'il a bon goût

  27. #327
    Effectivement, il manque la ligne qui met à jour la position des tirs. Je me demande s'il ne manque pas non plus une ligne pour incrémenter le score, car pour le moment on ne marque aucun point pour avoir détruit une saucisse en tirant dessus.

  28. #328
    Ah ? Chez moi le score s'incrémente quand je tire sur les saucisses.
    Member of the United Colors of Canards
    Citation Envoyé par crAsh Voir le message
    Le but ici, c'est de s'amuser, se détendre, se chambrer, et dire à Nearo qu'il a bon goût

  29. #329
    Chez moi il ne s'incrémente pas.
    Et effectivement il y'avait un oubli dans le dernier canard concernant le déplacement des tirs.

    Mais je n'en veux pas à Sebum car cette rubrique reste vraiment celle que j'attends le plus à chaque ouverture de magazine.
    Et puis je pense que ce genre d'aléas est fait pour vérifier si l'on suit bien son cours :fanInside: et surtout, ça nous donne une bonne raison de chercher d'où vient le bug et de comprendre le principe du déroulement d'un jeu.

    Perso j'adore. J'ai suivi presque tous les tutoriels indiqués au début du sujet, et me suis lancé dans la création de petits programmes (balles qui rebondissent avec accélération par gravité, écrans de menu, avec des options comme le réglage de la résolution), je transpire du sang mais franchement, sans pouvoir expliquer pourquoi je m'éclate.
    J'ai notamment le cerveau qui fume en essayant de gérer les collisions mais "développez couché" sait nous montrer la voie.
    Dernière modification par olaf ; 16/03/2012 à 21h24.

  30. #330
    Bonjour,
    Désolé de revenir loin en arrière, mais la musique de la leçon 5 ne veut pas se charger...

    "Song playback failed. Please verify that the song is not DRM protected. DRM protected songs are not supported for creator games."

    Même en la remplaçant par un morceau de musique en creative Commons, ça me bloque à chaque fois... en retirant la musique ça tourne sans problème.
    Quelqu'un aurait une solution ?
    Tu me rappelles George, politiquement.

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •