Bon, il se peut que cette question me fasse définitivement passer pour un branque, mais je peine a trouver des réponses claires et précises sur le net. En tant que developpeurs sur Irrlicht, je pense que vous détenez une réponse qui m'aidera a comprendre.
(si je me plante sur tout ou partie, ne pas hésiter a me reprendre)
Dans les jeux, le Moteur du jeu est souvent le point qui centralise les appels aux différents moteurs (son / graphisme / réseau). Mon souci porte pour l'instant sur le fameux "Main Loop" dont je parle dans ma présentation, c a d la boucle principale dans laquelle je vais faire ces appels (et donc que j'ai abusivement appelé moteur de jeu quelques lignes plus haut).
Sur cette page, le mec fait un exemple en Managed DX (apparement). J'ai eu beau jeter un coup d'oeil aux tutos d'Irrlicht et leur transcription pour .NET CP, je n'arrive pas a mettre le doigt sur le truc, LA fonction, l'appel qui va bien. Enfin bref, j'arrive pas a voir ou se trouve ce foutu main loop.
Est ce que je me plante du tout au tout ? Je prends le probleme dans le mauvais sens ?
Comment gerez vous ça chez vous ?
Hors ligne
Ce que tu dis n'est ni vrai ni faux en soi.
Je ne comprends pas pourquoi tu présente cette "Main Loop" comme une sacrosainte fonction. Rien ne t'oblige à en avoir une. Il suffit de faire un boucle quelque part et de faire le rendu à chaque fois que la boucle est exécutée...
Ainsi, ce qui correspond à ta main loop n'est autre que le "while" que tu trouvera dans tous les exemples d'Irrlicht .NET CP
Hors ligne
j'ai jetté un oeil sur le code dont tu as mis le lien, en fait le type dit simplement qu'il faut toujours une main loop a un endroit ou un autre, donc il donne un exemple avec une main loop
while(battleForm.Created) { battleForm.Render(); Application.DoEvents(); }
ensuite, il dit que ca ralentit de faire autant d'appel de la méthode DoEvent de Application (laquelle est censé faire bouger le monde )
il dit ensuite que pour gratter quelques microsecondes il faut faire l'appel de cette facon :
Application.Run(battleForm);
et il explique que en fait tout ce qu'il a fait c'est placer une boucle (LA main_loop comme tu dit) dans la méthode Run de la classe Application
voila c'est tout bete en fait, il s'agit juste d'une histoire de "ou doit je placer mon while"
mais si tu veux mon avis, tu devrai pas faire confiance au contenu du site ce gars, c'est un windowsien
(je plaisante hein .. )
Dernière modification par Jerry Kan (16-12-2006 17:48:23)
Hors ligne
ouais, ok, je me sens con là
Je vous remercie en tout cas, et je vais, fort de ces nouveaux éléments, me pencher sur les codes a dispos.
Hors ligne
Pour aller plus loin dans les discussions hautement philosophales , un jeu est généralement fait de plusieurs loop ^^ (voir les threads de ce forum sur... les threads )
Hors ligne
@Kedu : Moi je trouve quand même que les threads sont un danger en eux-mêmes. Je suis actuellement en plein dans la conception du serveur mon projet TOP SECRET. Je peux vous dire que le serveur tourne au final -et ce quelque soit le nombre de joueurs- avec deux threads. Le thread principal (qui fait de l'écoute sur les sockets par exemple) et un thread secondaire de timers (evènements exécutés tous les X milisecondes. Au final, la bête peut avoir 1200 sockets connectés, des tonnes de queries dans tous les sens, elle reste à quelques % du CPU -or c'est bien connu, ce qui limite souvent les serveurs de MMORPG c'est pas la bande passante mais le CPU, quand on a pas un quinti-Xeon avec 10GO de RAM.
C'était un petit hors sujet mais je trouve qu'on a trop tendance à glorifier les threads sans rappeler que c'est aussi une source de bugs / de ralentissements colossale.
PS : Application.DoEvents() boouh ! Forcer l'appel des messages d'évènements c'est moche !
Hors ligne
Mais... j'ai juste dit que généralement les jeux sont fait de plusieurs threads lol !
Cela dit j'en profite DeusXL (je sais, j'abuse ^^) peut-on imaginer que cette lib client/serveur soit intégrée à terme à Irrlicht.NET CP ? et/ou tant que j'y suis dans les questions, intègreras-tu ODE à Irrlicht.NET CP dans le cadre de ton Secret Project ?
Hors ligne
ok, je viens de faire marcher ma premiere bidouille avec Irrlicht (loader une map Q3, autre que celle fournie de base), c'est effectivement assez trivial. Bon, me reste encore plein de trucs a faire avec Irrlicht
[EDIT] OUAIS ! Irrlicht ça roxe des poneys nains ! (expression de joie de par chez moi). Recuperation d'une map de l'exterieur, execution d'un truc en C# sans passer par les winforms. Mince, je m'étonne moi meme. J'arrive enfin a re-reflechir (un truc que j'ai oublié a force d'inactivité) et vala, j'arrive a pondre des trucs.
Joie
Dernière modification par Ravine (17-12-2006 17:30:20)
Hors ligne
@Kedu : Bon le thread est définitivement contaminé (au sujet des threads, ne t'inquiète pas je te reproche rien, c'est juste une précision en voyant le mot thread partout )
Cela dit j'en profite DeusXL (je sais, j'abuse ^^) peut-on imaginer que cette lib client/serveur soit intégrée à terme à Irrlicht.NET CP ? et/ou tant que j'y suis dans les questions, intègreras-tu ODE à Irrlicht.NET CP dans le cadre de ton Secret Project ?
1) Non 2) Non
Raisons :
1) La lib n'est développée que pour le jeu, par exemple elle s'articule autour d'un serveur TCP qui envoit à peu près toutes les données et un serveur UDP qui n'envoit que des choses peu importantes (et très redondantes) comme la position du joueur. D'ailleurs, ce super projet TOP SECRET (j'aurais honte à ma place... mince ça veut dire que j'ai honte) ne sera pas Open-Source mais uniquement un jeu gratuit (je précise cependant qu'à la fin de l'exploitation, nous libèrerons la source très probablement).
2) Non, désolé, pour ce super top secret projet je n'utilise pour l'instant que la physique d'Irrlicht optimisée... En réalité dans un MMOrpg on n'a besoin que d'intersections boîtes/meshes, rien de complexe comme dans un FPS par exemple.
Dernière modification par DeusXL (17-12-2006 18:05:12)
Hors ligne
(allez y hein, contaminez, moi j'apprends pendant ce temps là)
Hors ligne