任天堂模拟器Silverlight版开发,POPNes Emulator!

如果你对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


你可能感兴趣的:(数据结构与算法,javascript,ViewUI)