#0 

16-12-2006 15:00:06

Ravine
Membre
Date d'inscription: 09-12-2006
Messages: 61

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


#1 

16-12-2006 16:56:15

DeusXL
Abonné
Lieu: Paris
Date d'inscription: 27-09-2006
Messages: 174

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


#2 

16-12-2006 17:46:08

Jerry Kan
Habitué
Date d'inscription: 21-11-2006
Messages: 265

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

Code:

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 :

Code:

 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)

Dernière modification par Jerry Kan (16-12-2006 17:48:23)

Hors ligne


#3 

16-12-2006 18:32:58

Ravine
Membre
Date d'inscription: 09-12-2006
Messages: 61

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


#4 

16-12-2006 18:37:30

kedu
Modérateur
Date d'inscription: 23-09-2006
Messages: 155

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


#5 

16-12-2006 21:52:18

DeusXL
Abonné
Lieu: Paris
Date d'inscription: 27-09-2006
Messages: 174

@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


#6 

16-12-2006 22:20:43

kedu
Modérateur
Date d'inscription: 23-09-2006
Messages: 155

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


#7 

17-12-2006 15:21:38

Ravine
Membre
Date d'inscription: 09-12-2006
Messages: 61

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

Dernière modification par Ravine (17-12-2006 17:30:20)

Hors ligne


#8 

17-12-2006 18:04:10

DeusXL
Abonné
Lieu: Paris
Date d'inscription: 27-09-2006
Messages: 174

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

Dernière modification par DeusXL (17-12-2006 18:05:12)


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


#9 

17-12-2006 18:43:32

Ravine
Membre
Date d'inscription: 09-12-2006
Messages: 61

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

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
15 invités en ligne
Aucun membre connecté
RSS Feed