如果你对Silverlight在游戏方面的还心存疑虑的话,l来看看自制的FC模拟器:)如果你想研究模拟器,咱们交流交流

这是以Silverlight技术为基础开发的任天堂模拟器,大约断断续续做了三个月左右,POPNES名字自用,和大家分享的过程挣扎了很久,毕竟这个模拟器还不完善,它现在只能支持90年以前的游戏(大约100个),我期望是能够更加完善之后给大家瞧瞧,下面是一个截图:

要想玩的话,请访问如下地址:

www.nowpaper.net/nes

www.nxria.com/nes

操控方法请点击左上角的问号:)

现在放进去了大概20多个游戏,通过一个XML维护,有时间的时候就更新一下,不过最近实在太忙了,没有太多的时间去管理,如果有哪位朋友愿意帮忙,十分感谢。

最早,我和猪笨无罪说开发出来一个模拟器也许是Silverlight技术最好的证明,因为桌面程序不稀奇,FLASH也有做出来,那么Silverlight是否就甘于落败吗?我觉得不是,于是以尝试的态度在进行开发,而这一下就过了三个月,然而,在开发模拟器的过程中,我发现很多有趣的经验,一些以前理解的了但是不能解释的东西,能在模拟器的Rom里得到了解决,甚至是恍然大悟,比如下面的代码:

 

通过一个全局的类来放入了经常调用的对象,在唯一的角度上来是的(注意不是const),毕竟模拟器只是在单一的模拟一个特定的环境,而不是多向的,所以在Class构造的时候就直接将自己放到了全局管理当中,如果按照以往的经验,我绝对不会这么干,是多么不安全的做法,但是面临着如此之多的互相调用,照实让人心烦意乱,只好采用了一下这个编写方式,结果发现很多问题迎刃而解,有的地方上能因此省事很多。

开发这个模拟器的历程并不是那么容易,碰到很多问题,第一个问题就是如何模拟一个早年的任天堂FC主机环境,参考了很多代码和文档,得出一个结论:早年的游戏开发真是非常人所能做的了,不得不佩服先辈们的智慧,有些开发方式方法到30年后的今天仍然没有太大的突破,比如对于Rom的储存和解释,如果放到现在来看,仍然是套相当先进的“脚本解释+数据结构”的系统,它不单考虑到了后续开发的问题,还提供了全面后续开发的扩展方法,也就是说,如果不是硬件发展,即便是8位的FC是可以做出3D游戏来的,不相信吗?可以参考一些90年后的第三代的游戏,比如《超级马里奥3》和《3D俄罗斯》,虽然马里奥3只是部分的实现了3D效果。

从开发模拟器的时候发现,做为一个游戏环境,要一些部分组成,对应模拟器而言,则是CPU(逻辑控制器)、PPU(显示处理模块)、APU(声音处理模块)、PaletteTable(调色板)、Mapper(映射表)……要知道,一个游戏能否在一个环境中运行,取决于Mapper,不同的映射表带给CPU和PPU的解释是不一样的,Rom小小的体积保存了所有的图像资料和游戏逻辑,目前最大的Rom只有256KB,512KB倒是有但寥寥无几,在最开始的时候,我努力的去分析数据结构,得出一个正确的解释方法,这个过程是漫长的,遭受的打击甚至打算放弃,而这时找到了一份文档,为此路扫开了一座障碍——NES Specifications,这份文档解释了至今所有Mapper结构和处理方法,如果各位有兴趣请在这里下载:Specifications资料点击这里下载,前面所说只支持90年代以前的游戏是因为后来的Mapper还没写完,如果有时间,一定补上:)

当超级马里奥运行起来的时候,我相当的兴奋:)

然而下一步的问题是,没有声音(控制器方面较为简单,只是向内部发出一个指令就行),这个部分困扰了长达一个多星期之久,最终跑到Silverlight的外国论坛上寻求帮助,得到了答案,使用

MediaStreamSource来解决,因为早期的声音存法也比较怪异,类似Midi的那种,所以,还要感谢那位帮我解决WaveFormat格式转换的朋友(虽然我记不得他的名字了),MediaStreamSource我觉得如有必要还是掌握一下,作为游戏开发,可能会面临ogg这样的专用音乐格式,到时候,我们可能不会完全指望mp3来做背景音乐了。

然而,某些东西是无法满足的,需要更好的东西来满足伟大用户们的需求,于是一个无聊的后半夜,我搜罗来了Joystick的资料,使用Javascript的方式结合ActivaX实现了外部手柄控制,如下图:

这是一个非常暴力的做法,但是效果确实不错的,不过在发出的版本中没有对手柄支持,为的是更加方便的玩上一两把。

得感谢如下各位朋友:

猪笨无罪:帮俺写了JS的手柄调用部分,还有照片的拍摄,哈哈,很多思路上从他身上找到了灵感。冬梅:帮忙做了界面动画部分,Thanks。王倩:界面是她设计的啦。

深蓝色右手,他的精神感染着Silverlight开发者,我们知道,未来更加美好。Goods,谢在网络通讯上面的支持。

我是一个码代码的,不太明白高深的理论,体系也好,模式也罢,只有实现出来的东西才是见得到摸得着的,而能够成为商业价值的也恰恰是这些……鄙人胡诌一通,不知所云,还望见谅。

操控方法请点击左上角的问号,WASD方向,JK为BA建,C为选择,V为开始键


本文转自nowpaper 51CTO博客,原文链接:http://blog.51cto.com/nowpaper/712458


任天堂模拟器Silverlight版开发,POPNes Emulator!相关推荐

  1. 计算机游戏32,ppsspp模拟器pc版

    游戏介绍: 日前,ppsspp官方对电脑32主机的rom进行了更新,此次更新后模拟器的版本为v1.2.2,支持更多的psp游戏,同时修正了部分游戏运行时的黑屏.花屏以及运行运行的问题,是目前官方最新的 ...

  2. 轻松创建Silverlight 4开发环境

    在银光中国网有一篇"轻松创建Silverlight开发环境"文章,相信帮助了不少Silverlight新手,不过该文章介绍的是Silverlight 3开发环境,本篇将基于上文进行 ...

  3. 微软Silverlight 5开发书籍汇总

    Microsoft Silverlight是一个跨浏览器的.跨平台的插件,为网络带来下一代基于.NET的媒体体验和丰富的交互式应用程序.Silverlight提供灵活的编程模型,并可以很方便地集成到现 ...

  4. android pc 模拟器哪个好,安卓模拟器电脑版哪个好?

    想要下载安卓模拟器在电脑里,不知道安卓模拟器电脑版哪个好用?今天就给大家推荐几款好用的安卓模拟器. 一.安卓模拟器电脑版推荐 1.itools安卓模拟器 itools安卓模拟器是itool官方开发的一 ...

  5. 苹果IOS模拟器电脑版用哪个好 逍遥模拟器玩部分苹果账号互通

    苹果IOS模拟器电脑版用哪个好 逍遥模拟器玩部分苹果账号互通 网上有IOS模拟器PC版,但是这个是IOS的SDK开发者方便在WINDOWS环境里开发调试IOS应用的,不是用这个模拟器就能直接安装IOS ...

  6. ps4模拟器linux,PS4模拟器PC版下载-Spine(PS4模拟器)v1.0 官方试用版-手机腾牛网

    PS4模拟器(Spine)是一款最新推出的PS4游戏模拟器软件,用户通过PS4模拟器PC版可以成功运行20-50款游戏,但是或多或少存在一些bug,需要等待开发人员后期修复.另外,值得注意的就是该软件 ...

  7. linux ps4模拟器下载地址,PS4模拟器PC版下载

    PS4模拟器(Spine)是一款最新推出的PS4游戏模拟器软件,用户通过PS4模拟器PC版可以成功运行20-50款游戏,但是或多或少存在一些bug,需要等待开发人员后期修复.另外,值得注意的就是该软件 ...

  8. GNS模拟linux,GNS3模拟器官方版最新版及安装说明

    GNS3模拟器官方版是一款网络模拟器,功能十分强大,能够模拟不同网络设备的硬件平台,如思科和瞻博的网络设备,包括路由器.交换机.防火墙等.同时,GNS3模拟器官方版还是一个图形化的网络模拟器,允许模拟 ...

  9. Python人生重开模拟器(高级版)

    目录 目录 ​编辑 目录 前言 游戏成果 截图 开始吧 游戏主框架 定义人类属性 定义人类方法 定义身份判断方法 定义初始化方法 定义成长方法 定义显示属性方法 定义打开背包方法 定义学习方法 定义商 ...

最新文章

  1. “32 位应用已死!”
  2. squid ldap认证(AD)
  3. DeepLearning based on PaddlePaddle系列二
  4. 分布式实时计算—Spark—Spark Core
  5. 【30分钟学完】canvas动画|游戏基础(1):理论先行
  6. 这次来个BGP反射器的简单小实验
  7. 异步EJB只是一个Gi头吗?
  8. 【预留】Apache Doris 0.12 官方中文文档学习
  9. 修改服务器的共享内存大小,服务器共享内存大小能改么
  10. r语言提取列名_玩转数据处理120题之P1-P20(R语言tidyverse版本)
  11. linux mongo 添加用户名和密码,mongodb3.4 安装及用户名密码设置
  12. FreeDOS 24 周年,创始人分享常用 DOS 命令备忘表
  13. pgAdmin添加外键约束
  14. 线性回归相关系数c语言,线性回归方程和线性相关系数计算实例
  15. linux杀死ltp进程,LTP套件使用方法详解
  16. Android基础| 1G-4G的介绍
  17. 利用layui创建二级表头
  18. Conflux TokenGazer AMA活动内容回顾
  19. docker常见故障分析
  20. Worse is Better

热门文章

  1. 离散数学实验一 真值计算
  2. Unity如何在AssetStore寻找需要的资源并下载导入?
  3. filebeat7.7.0相关详细配置预览- processors - script
  4. C语言动态数组的两种定义方式
  5. 微电网两阶段鲁棒优化经济调度方法(完美复现)
  6. JAVA结合AE(Adobe After Effects)实现类似于传影(视频DIY)的核心功能,程序也可以是艺术。
  7. golang处理excel表格
  8. vue 高德地图 定位插件 地图实例插件 获取点击的地方的经纬度和具体地址
  9. 《失控》(凯文·凯利)读书分享
  10. 2014 计算机会议,2014计算机学科国际会议排名.doc