我目前正在写在C#什么基本上可以要求一个老派我的NES硬件的自己的解释看的比赛,我正在开发。我已经解雇了FCE,并已观察NES如何显示和渲染的图形。

在简而言之,NES可容纳两个位图值得的图形信息,每个具有128×128的尺寸。这些被称为PPU表。一个是对BG砖,另一个是为精灵。该数据必须是在此内存为它在屏幕上绘制。现在,如果一个游戏有更多的图形数据则这两个银行,它可以写的这个新的信息到这些银行-overwriting那儿有什么部分 - 在每个帧的结束,并从下一帧以后使用它

所以,在老游戏是怎么做程序员的银行开关“?我的意思是,设计水平之内,他们怎么知道哪个图形集加载?我注意到,洛克人2个bankswitches当屏幕滚动编程从舞台的一个部分到下一个。但是他们怎么存储在级别信息 - 什么精灵复制过入PPU表,并在那里对他们在写

另一个例子是击中MM2暂停。暂停期间BG瓷砖克服写,然后当得到恢复玩家取消暂停。他们是如何记住哪些瓷砖取代它们,以及如何恢复呢?

如果我是个懒人,我可以只让一个巨大的静态位图,只是抢值的方式。但我强迫自己要限制这些值来创建一个更真实的体验。我读过关于如何M.C.惊人指南孩子们已经作出,我想是我如何编程这个游戏准系统。它仍然只是博格尔斯我的脑海里,这些程序员如何accomplisehd他们做了什么与他们有什么。

编辑:我能想到的唯一的解决办法是保持独立的表是什么状态瓷砖应在PPU在什么时候,但我认为这将是一个巨大的内存资源的NES将无法手柄。

有帮助吗?

解决方案

WSO思考和重新阅读文档的夜晚之后,我觉得我想出了一个完美的解决方案。矩阵!

鉴于以下数据:

 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

我可以利用这些信息来访问信息的查找表中,以确定什么样的信息,我需要。的第一个条目(0,0)定义了整个地图,其中作为其他的值定义所需要的在该特定屏幕。

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

所以装载地图时,我看项目(0,0)。它会说我需要加载X瓦到PPU,使用Y色调色板,Z地形设置和音乐。它还将说屏幕0是起始屏幕和水平从那里开始 - 字符相应位置

   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

现在可以说,我需要转换画面。我可以看看当前屏幕VS目标屏幕。如果新的屏幕需要的信息不在PPU,我可以启动它会在加载数据的转换。我也可以看到,如果我可以滚动到该方向;例如,如果目标屏幕是-1,我不能滚动该方向。我还可以存储一个标志的地方来确定,如果滚动到该屏幕上,我不能回卷。 E.g,我可以去右为屏幕#2,但不能向左滚动到屏幕1。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top