鉴于微软将放弃XNA,MonoGame将是喜欢XNA的朋友们的新选择,他是XNA游戏引擎的开源实现,而且是跨平台的,这意味着你可以用他开发OS、android、windows以及linux应用程序,多么给力的新选择!而MonoDevelop 是个适用于Linux、Mac OS X和Microsoft Windows的开放源代码集成开发环境,主要用来开发Mono与.NET Framework软件。MonoDevelop对于MonoGame就好比微软的VS2010和XNA,本文将介绍如何在linux下,利用MonoDevelop开发基于MonoGame的游戏,你会发现Linux下的游戏编程,从未如此简单过!

本文基于ubuntu14.04讲解:

1. 安装MonoDevelop

  sudo apt-get install monodevelop

  或者在软件中心搜索monogame,然后选择XNA-IDE一项进行安装,如下:

  安装MonoDevelop的时候会自动安装MonoGame

2.运行地一个Linux-Mono游戏

  打开MonoDevelop, 界面如下:

  

  点击“New”开始新建一个项目,输入项目名称,及工作目录等等,如下:

  

  然后,直接按F5运行,我们就能看见那个熟悉的空白游戏了----一个蓝色的方框:

  

  虽然这只是个方框,但它的意义是重大的,这意味着我们可以开始奇妙的linux游戏开发之旅了!

3. 小试牛刀----移植XNA标准示例程序Platformer

  Platformer是微软给出的一个XNA示例程序,可以在微软网站上下载,百度“XNA platformer”即可。

  直接在MonoDevelop中打开下载下来的Platformer工程是不行的,可能是Mono和VS的工程格式不一样,不过没关系,我们可以在MonoDevelop中新建立一个PlatformerLinux工程,然后将示例工程中的文件添加到此工程,如下图中高亮的几个文件,新建工程时自带的Game1文件可以删除。

  

  这里注意,Content目录我们没有添加,原因是MonoDevelop不能直接将资源文件,如图片、声音等编辑成XNA可识别的格式,即xnb格式。所以即便这里添加到Content目录,也无济于事。我们可以通过在Windows的VS中建立一个XNA工程来编译这些资源,然后拷贝到Mono工程的bin/debug/Content下直接使用;另外还可以通过XNA编译工具来直接编译资源,这样可以省去在VS下建立工程的麻烦,linux下面已经有XNA-compiler可用。

  这里,为了方便,我们在windows下对示例版的Platformer进行一次编译,然后将bin/debug/Content里面的内容直接copy到Mono工程的bin/debug/Content下,然后按F5直接运行,激动人心的事情发生了,运行成功!如下:

  

  游戏真的运行起来了,但是我们发现有两个明显的bug:

    1)游戏一开始player就挂掉了,按space键继续就OK了;

    2) 游戏的背景音乐没有声音,其他音效OK;

  对于第一个bug,我发现是由于Mono中Update的时候eclisped时间的问题,我发现MonoGame在暂停时,eclispe time是在走的。Mono游戏在第一次运行时,Update函数得到的 gameTime时间很长,根据游戏的逻辑自然会得到player挂掉的结论,读者可以自己推敲。我在Player类的 ApplyPhysics函数中对elapsed变量做个限制即可,如下:

           if (elapsed > 0.05f)
                 elapsed = 0.05f;

  然后再次运行,发现OK!

  至于第二个bug发现是 Plateformer类中MediaPlayer.Play(Content.Load<Song>("Sounds/Music"));这句执行时加载音乐有些问题,貌似Content不能加载Song类型,这个作为遗留,后续接续研究。

用MonoDevelop开发Linux游戏的更多相关文章

  1. 第一个独立开发的游戏 怪斯特:零 已经上线APP STORE!

    今天是个值得纪念的日子,而且是双喜临门 2年多来的摸爬滚打,终于有了回报 第一喜:自己独立开发的游戏 怪斯特:零 已经通过审核并上架APP STORE! 第二喜:迈入了自己期待2年之久的游戏行业,年后 ...

  2. JS开发HTML5游戏《神奇的六边形》(一)

    近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...

  3. Atitit 开发2d游戏的技术选型attilax总结

    Atitit 开发2d游戏的技术选型attilax总结 1.1. 跨平台跨平台:一定要使用跨平台的gui技术,目前最好的就是h5(canvas,webgl,dom) +js了..1 1.2. 游戏前后 ...

  4. JS开发HTML5游戏《神奇的六边形》(二)

    近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...

  5. JS开发HTML5游戏《神奇的六边形》(四)

    近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...

  6. JS开发HTML5游戏《神奇的六边形》(三)

    近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...

  7. Unity3d开发IOS游戏 基础

    Unity3d开发IOS游戏 基础 @阿龙 -  649998群 1.先说明两个问题,我在WIN7下面的U3D里面,用了雅黑字体,但是导出为ios后,字体就看不见了,这是为什么呢?这是需要在MAC下找 ...

  8. Libgdx开发ios游戏

    今天亲自尝试了LibGDX如何开发ios游戏, 必须条件: 1:mac操作系统,mac下必须安装Xcode     好像ios开发必须在mac操作系统下 2:mac下安装eclipse 3:eclip ...

  9. C#开发Linux守护进程

    用C#开发Linux守护进程   Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon ...

随机推荐

  1. SQL Server中的GUID

    GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值. GUID ...

  2. javascript的 Object 和 Function

    一. javascript 的 内置对象: Object 和 Function javascript所有东西,包括 Function 都是对象 . Array  其实是一个 Function 类型的对 ...

  3. 第 31 章 项目实战-PC 端固定布局[5]

    学习要点: 1.底部区域 2.说明区域 3.版权及证件区 主讲教师:李炎恢 本章主要开始使用学习用 HTML5 和 CSS3 来构建 Web 页面,第一个项目采用 PC 端固定布局来实现. 一.底部区 ...

  4. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.2 正式发布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  5. 变通实现微服务的per request以提高IO效率(三)

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  6. jquery.dataTable.js 基础配置

    $(document).ready(function () { $('#dataTables-example').DataTable({ responsive: true, "bPagina ...

  7. AMD and CMD are dead之Why Namespace?

    缘由 当我看到_Franky兄的微博的时候: 我觉得我有必要出来详细说说KMDjs到底有什么本质上的优势了,连教主_Franky.貘吃馍香都不能理解他的好处,那么可想而知,在前端圈.或是全端圈.或是I ...

  8. IE6/IE7中li底部4px空隙的Bug

    当li的子元素中有浮动(float)时,IE6/IE7中<li>元素的下面会产生4px空隙的bug. 代码如下: <ul class="list"> < ...

  9. jQuery静态方法noop,camelCase,nodeName,trim使用和源码分析

    noop方法 jQuery.noop()函数是一个空函数,它什么也不做. 当某些时候你需要传入函数参数,而且希望它什么也不做的时候,你可以使用该函数,也无需再新建一个空的函数. 示例: // 传入一个 ...

  10. 关于举办 2015年 Autodesk 助力云应用项目开发活动通知

    各位尊敬的Autodesk 合作伙伴,大家好! 相信您在过去的一年里应该对Autodesk最新的云服务技术有所了解,您是不是曾经闪现过一些很好的想法,却由于不确定是否真实可行,或担心没有技术支持来帮助 ...