任天堂模拟器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
任天堂模拟器Silverlight版开发,POPNes Emulator!相关推荐
- 计算机游戏32,ppsspp模拟器pc版
游戏介绍: 日前,ppsspp官方对电脑32主机的rom进行了更新,此次更新后模拟器的版本为v1.2.2,支持更多的psp游戏,同时修正了部分游戏运行时的黑屏.花屏以及运行运行的问题,是目前官方最新的 ...
- 轻松创建Silverlight 4开发环境
在银光中国网有一篇"轻松创建Silverlight开发环境"文章,相信帮助了不少Silverlight新手,不过该文章介绍的是Silverlight 3开发环境,本篇将基于上文进行 ...
- 微软Silverlight 5开发书籍汇总
Microsoft Silverlight是一个跨浏览器的.跨平台的插件,为网络带来下一代基于.NET的媒体体验和丰富的交互式应用程序.Silverlight提供灵活的编程模型,并可以很方便地集成到现 ...
- android pc 模拟器哪个好,安卓模拟器电脑版哪个好?
想要下载安卓模拟器在电脑里,不知道安卓模拟器电脑版哪个好用?今天就给大家推荐几款好用的安卓模拟器. 一.安卓模拟器电脑版推荐 1.itools安卓模拟器 itools安卓模拟器是itool官方开发的一 ...
- 苹果IOS模拟器电脑版用哪个好 逍遥模拟器玩部分苹果账号互通
苹果IOS模拟器电脑版用哪个好 逍遥模拟器玩部分苹果账号互通 网上有IOS模拟器PC版,但是这个是IOS的SDK开发者方便在WINDOWS环境里开发调试IOS应用的,不是用这个模拟器就能直接安装IOS ...
- ps4模拟器linux,PS4模拟器PC版下载-Spine(PS4模拟器)v1.0 官方试用版-手机腾牛网
PS4模拟器(Spine)是一款最新推出的PS4游戏模拟器软件,用户通过PS4模拟器PC版可以成功运行20-50款游戏,但是或多或少存在一些bug,需要等待开发人员后期修复.另外,值得注意的就是该软件 ...
- linux ps4模拟器下载地址,PS4模拟器PC版下载
PS4模拟器(Spine)是一款最新推出的PS4游戏模拟器软件,用户通过PS4模拟器PC版可以成功运行20-50款游戏,但是或多或少存在一些bug,需要等待开发人员后期修复.另外,值得注意的就是该软件 ...
- GNS模拟linux,GNS3模拟器官方版最新版及安装说明
GNS3模拟器官方版是一款网络模拟器,功能十分强大,能够模拟不同网络设备的硬件平台,如思科和瞻博的网络设备,包括路由器.交换机.防火墙等.同时,GNS3模拟器官方版还是一个图形化的网络模拟器,允许模拟 ...
- Python人生重开模拟器(高级版)
目录 目录 编辑 目录 前言 游戏成果 截图 开始吧 游戏主框架 定义人类属性 定义人类方法 定义身份判断方法 定义初始化方法 定义成长方法 定义显示属性方法 定义打开背包方法 定义学习方法 定义商 ...
最新文章
- “32 位应用已死!”
- squid ldap认证(AD)
- DeepLearning based on PaddlePaddle系列二
- 分布式实时计算—Spark—Spark Core
- 【30分钟学完】canvas动画|游戏基础(1):理论先行
- 这次来个BGP反射器的简单小实验
- 异步EJB只是一个Gi头吗?
- 【预留】Apache Doris 0.12 官方中文文档学习
- 修改服务器的共享内存大小,服务器共享内存大小能改么
- r语言提取列名_玩转数据处理120题之P1-P20(R语言tidyverse版本)
- linux mongo 添加用户名和密码,mongodb3.4 安装及用户名密码设置
- FreeDOS 24 周年,创始人分享常用 DOS 命令备忘表
- pgAdmin添加外键约束
- 线性回归相关系数c语言,线性回归方程和线性相关系数计算实例
- linux杀死ltp进程,LTP套件使用方法详解
- Android基础| 1G-4G的介绍
- 利用layui创建二级表头
- Conflux TokenGazer AMA活动内容回顾
- docker常见故障分析
- Worse is Better
热门文章
- 离散数学实验一 真值计算
- Unity如何在AssetStore寻找需要的资源并下载导入?
- filebeat7.7.0相关详细配置预览- processors - script
- C语言动态数组的两种定义方式
- 微电网两阶段鲁棒优化经济调度方法(完美复现)
- JAVA结合AE(Adobe After Effects)实现类似于传影(视频DIY)的核心功能,程序也可以是艺术。
- golang处理excel表格
- vue 高德地图 定位插件 地图实例插件 获取点击的地方的经纬度和具体地址
- 《失控》(凯文·凯利)读书分享
- 2014 计算机会议,2014计算机学科国际会议排名.doc