2008-12-18 11 views
6

J'ai développé des applications Web depuis un moment maintenant et j'ai plongé dans le développement d'applications GUI et Game.Comment est l'interface graphique et le flux de programmes de jeu par rapport aux programmes Web

Dans l'application web (php pour moi), une demande est faite au fichier, ce fichier contient tous les fichiers nécessaires pour traiter l'information en mémoire, puis le flux est de haut en bas pour chaque requête. (principalement)

Je sais que pour les Jeux, l'action se passe dans la boucle de jeu, mais comment les différents éléments d'un jeu sont-ils superposés dans cette seule boucle (système de menu, gui, chargement d'assets et monde 3D) avec le chargement et le déchargement constants de certaines choses. Idem pour les programmes GUI, je crois qu'il existe une "boucle d'application" de quelques sortes.

La plupart des éléments appelés en mémoire puis accédés sont-ils liés et chargés en mémoire si nécessaire?

Ce qui m'a aidé à développer des applications web plus rapidement, c'est quand j'ai compris le déroulement du programme, il n'a pas besoin d'être détaillé, juste l'idée générale ou le pseudo code.

Répondre

14

Il y a presque toujours une boucle dans tout cela - mais ce n'est pas quelque chose que vous auriez tendance à penser pendant la majeure partie de votre développement.

Si vous prenez un pas en arrière, vos applications Web sont basées autour d'une boucle - la boucle de serveur Web accept():

while(listening) { 
    get a socket connection; 
    handle it; 
} 

.. mais en tant que développeur Web, vous êtes protégés de cela, et d'écrire code 'event driven' - 'quand quelqu'un demande cette URL, faites-le'.

sont également des interfaces graphiques sur événements et les événements sont également détectés par une boucle quelque part:

while(running) { 
    get mouse/keyboard/whatever event 
    handle it 
} 

Mais un développeur GUI n'a pas besoin de penser à la boucle beaucoup. Ils écrivent 'quand un clic de souris se produit ici, faites ceci'.

Jeux, toujours les mêmes. Quelqu'un doit écrire une boucle:

while(game is in progress) { 
    invoke every game object's 'move one frame' method; 
    poll for an input event; 
} 

... tout autre code est écrit dans un style plus axé sur l'événement: «lorsqu'un objet de balle coïncide avec cet objet, déclencher un événement d'explosion.

+0

félicitations pour les similitudes de la boucle dans le développement web. –

1

Pour les applications et, dans une moindre mesure, les jeux, le logiciel est axé sur les événements. L'utilisateur fait "quelque chose" avec le clavier ou la souris et cet événement est envoyé au reste du logiciel.

Dans Jeux, la boucle de jeu est importante car elle est axée sur le traitement de l'écran et de l'état du jeu. Avec de nombreux jeux nécessitant des performances en temps réel. Avec l'API graphique 3D moderne, une grande partie du traitement de l'écran peut être transférée sur le GPU. Cependant, l'état du jeu est suivi par la boucle principale. Une grande partie de l'effort d'une équipe pour un jeu est concentrée sur le fait de rendre le traitement de la boucle très lisse.

Pour l'application, un traitement lourd est généralement généré sur un filetage. C'est un sujet complexe en raison des problèmes liés à deux choses qui tentent d'accéder aux mêmes données. Il y a des livres entiers sur le sujet.

Pour les applications de la séquence est

    utilisateur
  1. fait X, X et les informations associées (comme coordonnées X, Y) est envoyé à l'UI_Controller.
  2. L'interface utilisateur décide de la commande à exécuter.
  3. La commande est exécutée.
  4. Le modèle/les données sont modifiés.
  5. La commande indique à l'UI_Controller de mettre à jour diverses zones de l'interface utilisateur.
  6. Le contrôleur UI redessine l'interface utilisateur.
  7. La commande renvoie.
  8. L'application attend l'événement suivant.

Il existe plusieurs variantes de ceci. Le modèle peut permettre aux écouteurs d'attendre des changements dans les données. Lorsque les données s'exécutent, l'écouteur redessine l'interface utilisateur.

1

En ce qui concerne la programmation de jeu est allé je suis simplement un amateur, mais ce que je faisais d'habitude:

j'avais un objet qui représente un concept très générique d'une « scène » dans le jeu. Toutes les différentes sections majeures du jeu proviennent de cet objet Scène. Une scène peut vraiment être n'importe quoi, selon le type de jeu. Quoi qu'il en soit, chaque scène plus spécifique dérivée de la scène avait une procédure pour charger tous les éléments nécessaires pour cette scène. Lorsque le jeu devait changer de scène, le pointeur vers la scène active était défini sur une nouvelle scène, qui chargeait alors tous les objets nécessaires. L'objet Scene générique avait des fonctions virtuelles telles que Load, Draw et Logic qui étaient appelées à des moments particuliers de la boucle de jeu à partir du pointeur de scène actif. Chaque scène spécifique a ses propres façons d'implémenter ces méthodes.

Je ne sais pas si c'est comme ça que ça doit être fait ou pas, mais c'était un moyen très facile pour moi de contrôler le flux des choses. Le concept de scène a également facilité le stockage de plusieurs scènes en tant que collections. Avec plusieurs pointeurs de scènes stockés dans une pile de sortes à la fois, les scènes pouvaient être stockées en réserve et conserver leur état complet quand elles revenaient, ou même faire des choses comme obscurcies mais continuer à dessiner pendant que la scène active les recouvrait en superposition de toutes sortes. Donc, de toute façon, si vous le faites comme ça, ce n'est pas exactement comme une page web, mais je pense que si vous y réfléchissez bien, c'est assez similaire.