Question

Je suis en train d'écrire en C # ce qui pourrait essentiellement appeler ma propre interprétation du matériel NES pour une vieille école à la recherche jeu que je développe. J'ai mis le feu jusqu'à et ont été FCE observant comment les NES affichés et rendus graphiques.

En un mot, la NES pourrait tenir deux bitmaps une valeur d'informations graphiques, chacune avec les dimensions de 128x128. Ceux-ci sont appelés les tables de PPU. L'un était pour les carreaux BG et l'autre pour les sprites. Les données devaient être dans cette mémoire pour qu'il soit dessiné sur l'écran. Maintenant, si un jeu avait des données plus graphiques alors ces deux banques, il pourrait écrire des portions de cette nouvelle information à ces banques -overwriting ce qui était là -. À la fin de chaque trame, et l'utiliser à partir du prochain cadre en avant

Alors, dans de vieux jeux comment fait de commutateur de banque »les programmeurs? Je veux dire, dans la conception de niveau, comment ils savent quel jeu graphique à la charge? J'ai remarqué que Mega Man 2 bankswitches lorsque l'écran défile programatically d'une partie de la scène à l'autre. Mais comment ont-ils stockent ces informations dans le niveau - ce sprites à copier dans les tables de PPU, et où les écrire à

Un autre exemple serait frapper pause dans MM2. tuiles BG se sur-écrits pendant la pause, puis se restaurer quand le joueur arrête la pause. Comment ils se souviennent qu'ils tuiles remplacées et comment les restaurer?

Si j'étais paresseux, je pouvais faire un énorme bitmap statique et juste valeurs appui de cette façon. Mais je me forçant à limiter ces valeurs pour créer une expérience plus authentique. J'ai lu le guide étonnant sur la façon dont M.C. Enfants a été fait, et je suis en train d'être barebones sur la façon dont je programme ce jeu. Il reste juste trouble mon esprit comment ces programmeurs accomplisehd ce qu'ils ont fait avec ce qu'ils avaient.

EDIT: La seule solution que je peux penser serait de tenir des tables séparées qui énonceront ce carrelage doit être dans le PPU à quel moment, mais je pense que ce serait une énorme ressource de mémoire que les NES ne seraient pas en mesure de poignée.

Était-ce utile?

La solution

WSO après une nuit de réflexion et des documents relisant, je pense que je suis venu avec une solution parfaite. Une matrice!

Étant donné les données suivantes:

 3, -1, -1, -1, -1
-1,  0,  1,  2, -1
-1, -1, -1,  3, -1
-1, -1,  5,  4, -1
-1, -1, -1, -1, -1

Je peux utiliser ces informations pour accéder à l'information dans les tables de consultation afin de déterminer quelles sont les informations dont j'ai besoin. La première entrée (0,0) définit toute la carte, alors que les autres valeurs définissent ce qui est nécessaire dans cet écran particulier.

MAP ARRAY    PALETTE   MUSIC   TILESET  STARTINGSCR
   0            0        0        1           4
   1            4        3        2           2
   2                         etc.
   3

lors du chargement de la carte, je regarde l'article (0,0). Il dira que je besoin de charger des tuiles de X dans le PPU, utilisez palette de couleurs Y, Z tileset, et une musique. Il dira aussi que l'écran 0 est l'écran de démarrage et que le niveau commence là -. La position du caractère en conséquence

   SCREEN     PALETTE    TILESET   MUSIC   TILEDATA  SCROLLL SCROLLR SCROLLU SCROLLD  
      0           0          1       2         4       true     true    true    true
      1                   etc
      2           2          1       2         3       false   false     false  true

Maintenant, supposons que je dois les écrans de transition. Je peux regarder l'écran en cours par rapport à l'écran cible. Si le nouvel écran a besoin d'informations non PPU, je peux lancer une transition qui charge les données pendant. Je peux aussi voir si je peux faire défiler dans cette direction; par exemple, si l'écran cible est -1, je ne peux pas défiler cette direction. Je peux aussi enregistrer un endroit de drapeau pour déterminer si cet écran sur défilement, je ne peux pas défiler en arrière. Par exemple, je peux aller à droite dans l'écran # 2, mais ne peut faire défiler à gauche dans l'écran 1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top