- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我目前正在用 C# 编写基本上可以称为我自己对 NES 硬件的解释,用于我正在开发的老式游戏。我已经启动了 FCE,并一直在观察 NES 是如何显示和渲染图形的。
简而言之,NES 可以保存两个位图的图形信息,每个位图的尺寸为 128x128。这些称为 PPU 表。一个用于 BG 瓷砖,另一个用于 Sprite 。数据必须在此内存中才能在屏幕上绘制。现在,如果游戏有比这两个库更多的图形数据,它可以在每一帧结束时将这些新信息的一部分写入这些库 - 覆盖那里的内容 - 并从下一帧开始使用它。
那么,在旧游戏中,程序员是如何“切换银行”的?我的意思是,在关卡设计中,他们如何知道要加载哪个图形集?我注意到当屏幕以编程方式从舞台的一个部分滚动到下一个部分时,《洛克人 2》的银行切换。但是他们如何在关卡中存储这些信息 - 将哪些 Sprite 复制到 PPU 表中,以及将它们写入何处?
另一个例子是在 MM2 中点击暂停。 BG 瓷砖在暂停期间被覆盖,然后在玩家取消暂停时恢复。他们如何记住他们更换了哪些瓷砖以及如何恢复它们?
如果我很懒惰,我可以制作一个巨大的静态位图并以这种方式获取值。但我强制自己限制这些值(value)观,以创造更真实的体验。我已经阅读了关于 M.C. children 是制作出来的,我正在尝试对我如何编程这个游戏做一个准系统。我仍然无法想象这些程序员是如何利用他们所拥有的东西完成他们所做的事情的。
编辑:我能想到的唯一解决方案是保存单独的表,说明 PPU 中应该在什么时候出现哪些图 block ,但我认为这将是 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 ,而其他值则定义了该特定屏幕所需的内容。
MAP ARRAY PALETTE MUSIC TILESET STARTINGSCR
0 0 0 1 4
1 4 3 2 2
2 etc.
3
所以在加载 map 时,我会查看项目 (0,0)。它会说我需要将 X 瓦片加载到 PPU 中,使用 Y 调色板、Z 瓦片集和 A 音乐。它还会说屏幕 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
现在假设我需要转换屏幕。我可以查看当前屏幕与目标屏幕。如果新屏幕需要的信息不在 PPU 中,我可以启动一个过渡,在此期间加载数据。我还可以查看是否可以滚动到那个方向;例如,如果目标屏幕是-1,我不能滚动那个方向。我还可以在某处存储一个标志,以确定如果滚动到该屏幕上,我无法向后滚动。例如,我可以直接进入屏幕 #2,但不能向左滚动进入屏幕 1。
关于memory - 旧 NES 应用程序上的“银行切换” Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3030565/
我正在创建一个在线学习平台,我们在其中使用 Moodle 输入和存储问题。我需要创建一个包装器,使用它我可以从我的应用程序访问 Moodle 的问题库。最好的方法是什么:插件还是 Web 服务?已经有
我有一个银行线程和 4 个 ATM 机 .txt 文件。(atm_0_input_file.txt - atm_4_input_file.txt)。 每个文件都是一个线程,一个bank也是一个线程。当
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
当我使用“exchange_to (: CLP) .to_i”方法时,它在 OrdersController#create 中给我错误 Money::Bank::GoogleCurrencyFetch
您好,我对数据库的“用户”和从数据库访问其详细信息的企业“客户”感到困惑。 我正在构建一个网络,客户可以在其中登录并访问他们的银行余额、对账单、直接借记等(银行应用程序)。我的 SQL 数据库将有一个
我正在使用 Monzo 银行 API 开发一个金融应用程序,身份验证过程最终会从 Monzo api 接收 access_token:https://docs.monzo.com/#acquire-a
我正在设计银行 ATM 消息处理/路由框架,需要一些帮助来完成技术和架构。交易来自多个合作银行的 ATM,比如目前我们为 5 到 6 家银行提供服务,每家银行不超过 10 台 ATMS。 消息通过 t
我是第一次使用 Stripe,对它们提供的不同 API 有点困惑。有一个 Payment Method API,它是推荐用于处理客户付款方式的 API,但目前它只支持信用卡,如果我理解正确的话....
我是一名优秀的程序员,十分优秀!