当前位置: 首页 > news >正文

用MonoDevelop开发Linux游戏

鉴于微软将放弃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类型,这个作为遗留,后续接续研究。

转载于:https://www.cnblogs.com/yanghaizhou/p/4783427.html

相关文章:

  • Android 服务类Service 的详细学习
  • Android获取返回键的点击事件
  • 赢得Docker挑战最佳实践
  • 小蚂蚁学memcache笔记—php操作memcache(2)
  • ipv6现状,加英文的中括号访问, ipv6测试http://test-ipv6.com
  • git学习------git commit命令的默认编辑器的修改
  • 新浪、万网前系统架构师高俊峰:统一监控报警平台架构设计思路
  • HTLM5 WebSocket权威指南
  • NSString+URLEncoding.h --使用Obj-C对数据等进行URLEncoding编码
  • 安卓很抱歉已停止运行
  • oracle中execute immediate的使用(select/insert/update/delete)(转)
  • log4j.properties模板
  • BZOJ 1324 Exca神剑 最小割
  • 滚动条美化,两款优秀的模拟滚动条插件
  • HDU 1230解题报告
  • (三)从jvm层面了解线程的启动和停止
  • 【EOS】Cleos基础
  • 08.Android之View事件问题
  • canvas 高仿 Apple Watch 表盘
  • HTTP请求重发
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript DOM 10 - 滚动
  • Java教程_软件开发基础
  • node和express搭建代理服务器(源码)
  • SpingCloudBus整合RabbitMQ
  • Transformer-XL: Unleashing the Potential of Attention Models
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 飞驰在Mesos的涡轮引擎上
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 近期前端发展计划
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何使用 JavaScript 解析 URL
  • 微信公众号开发小记——5.python微信红包
  • 智能网联汽车信息安全
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • $.each()与$(selector).each()
  • (26)4.7 字符函数和字符串函数
  • (二)hibernate配置管理
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (算法)N皇后问题
  • (一)基于IDEA的JAVA基础10
  • (转)树状数组
  • .Net mvc总结
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET使用存储过程实现对数据库的增删改查
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [BUG]vscode插件live server无法自动打开浏览器
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [DM复习]Apriori算法-国会投票记录关联规则挖掘(上)
  • [EFI]Atermiter X99 Turbo D4 E5-2630v3电脑 Hackintosh 黑苹果efi引导文件