Domanda

Attualmente sto scrivendo in C # quello che potrebbe essere chiamato in fondo la mia interpretazione dell'hardware NES per una vecchia scuola in cerca di gioco che sto sviluppando. Ho sparato FCE e sto osservando come il NES visualizzati e resa grafica.

In breve, il NES potrebbero tenere due bitmap pena di informazioni grafiche, ognuna delle dimensioni di 128x128. Questi sono chiamati i tavoli PPU. Uno era per piastrelle BG e l'altro era per gli sprite. I dati dovevano essere in questa memoria per poter essere disegnato sullo schermo. Ora, se un gioco ha avuto dati più grafici quindi queste due banche, si potrebbero scrivere porzioni di queste nuove informazioni a queste banche -overwriting quello che c'era -. Alla fine di ogni fotogramma, e utilizzarlo dal fotogramma successivo in poi

Quindi, in vecchi giochi come ha fatto 'interruttore banca' i programmatori? Voglio dire, entro il design dei livelli, come facevano a sapere quale set grafica a carico? Ho notato che Mega Man 2 bankswitches quando lo schermo scorre programmaticamente da una porzione di stadio a quello successivo. Ma come hanno fatto a memorizzare queste informazioni nel livello - cosa sprite per copiare nelle tabelle PPU, e dove scrivere loro a

Un altro esempio sarebbe colpire pausa MM2. piastrelle BG vengono sovrascritti durante la pausa, e quindi ottenere ripristinate quando i giocatori la toglie. Come hanno fatto a ricordare quali piastrelle hanno sostituito e come ripristinare loro?

Se ero pigro, ho potuto solo fare un enormi valori bitmap statica e basta prendere in questo modo. Ma mi sto costringendo a limitare questi valori per creare un'esperienza più autentica. Ho letto la guida incredibile su come M.C. Bambini è stato fatto, e io sto cercando di essere barebone su come programmo questo gioco. E 'ancora solo la mia mente vacilla come questi programmatori accomplisehd quello che hanno fatto con quello che avevano.

EDIT: L'unica soluzione mi viene in mente sarebbe quello di tenere tavoli separati quello stato quello piastrelle dovrebbero essere nella PPU a che ora, ma penso che sarebbe una risorsa enorme di memoria che il NES, non sarebbero in grado di manico.

È stato utile?

Soluzione

WSO dopo una notte di pensare e di documenti ri-lettura, credo che mi si avvicinò con una soluzione perfetta. Una matrice!

In considerazione i seguenti dati:

 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

posso usare queste informazioni per accedere alle informazioni all'interno di tabelle di ricerca per determinare quali informazioni che mi servono. La prima voce (0,0) definisce l'intera mappa, dove come gli altri valori definiscono ciò che è necessario in quel particolare schermo.

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

Così, quando il caricamento della mappa, guardo punto (0,0). Si dirà che ho bisogno di piastrelle carico X nella PPU, utilizzare Y tavolozza colore, Z tileset, e Una musica. Sarà anche dire che lo schermo 0 è la schermata iniziale e che il livello inizia lì -. La posizione del carattere di conseguenza

   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

Ora lascia dire ho bisogno di schermi di transizione. Posso guardare la schermata corrente vs lo schermo di destinazione. Se il nuovo schermo non ha bisogno di informazioni nel PPU, posso avviare una transizione che caricherà i dati durante esso. Posso anche vedere se riesco a scorrere in quella direzione; ad esempio, se lo schermo bersaglio è -1, non posso scorrere quella direzione. Posso anche memorizzare un qualche flag per determinare che se scorrere su quella dello schermo, non posso tornare scorrimento. Per esempio, posso andare a destra nello schermo # 2 ma non può scorrere a sinistra nella schermata 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top