#1 

16-12-2006 14:00:06

Ravine
Membres
Date d'inscription:
Messages: 61
IP: 82.240.209.43
Courriel

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


#2 

16-12-2006 15:56:15

DeusXL
Membres
Avatar de DeusXL
Date d'inscription:
Messages: 174
IP: 82.66.209.23
Courriel

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 wink


Fanatique d'Irrlicht + Fanatique de Mono + Fanatique de Linux => Créateur d'Irrlicht .NET CP bien sûr !
Version actuelle d'Irrlicht .NET CP : 0.8, Version en test : 0.9.

Hors ligne


#3 

16-12-2006 16:46:08

Jerry Kan
Membres
Date d'inscription:
Messages: 265
IP: 82.243.77.149
Courriel

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 smile )
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 tongue
(je plaisante hein .. big_smile)


Hors ligne


#4 

16-12-2006 17:32:58

Ravine
Membres
Date d'inscription:
Messages: 61
IP: 82.240.209.43
Courriel

ouais, ok, je me sens con là smile
Je vous remercie en tout cas, et je vais, fort de ces nouveaux éléments, me pencher sur les codes a dispos.


Hors ligne


#5 

16-12-2006 17:37:30

kedu
Modérateurs
Avatar de kedu
Date d'inscription:
Messages: 155
IP: 212.195.125.231
Courriel

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


Hors ligne


#6 

16-12-2006 20:52:18

DeusXL
Membres
Avatar de DeusXL
Date d'inscription:
Messages: 174
IP: 82.66.209.23
Courriel

@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 !


Fanatique d'Irrlicht + Fanatique de Mono + Fanatique de Linux => Créateur d'Irrlicht .NET CP bien sûr !
Version actuelle d'Irrlicht .NET CP : 0.8, Version en test : 0.9.

Hors ligne


#7 

16-12-2006 21:20:43

kedu
Modérateurs
Avatar de kedu
Date d'inscription:
Messages: 155
IP: 212.195.125.231
Courriel

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


#8 

17-12-2006 14:21:38

Ravine
Membres
Date d'inscription:
Messages: 61
IP: 82.240.209.43
Courriel

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 smile

[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 smile


Hors ligne


#9 

17-12-2006 17:04:10

DeusXL
Membres
Avatar de DeusXL
Date d'inscription:
Messages: 174
IP: 82.66.209.23
Courriel

@Kedu : Bon le thread est définitivement contaminé big_smile (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 big_smile)

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 big_smile
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 wink (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.


Fanatique d'Irrlicht + Fanatique de Mono + Fanatique de Linux => Créateur d'Irrlicht .NET CP bien sûr !
Version actuelle d'Irrlicht .NET CP : 0.8, Version en test : 0.9.

Hors ligne


#10 

17-12-2006 17:43:32

Ravine
Membres
Date d'inscription:
Messages: 61
IP: 82.240.209.43
Courriel

(allez y hein, contaminez, moi j'apprends pendant ce temps là)


Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
167 invités en ligne
membre en ligne: -
RSS Feed