【发布时间】:2013-11-16 21:14:28
【问题描述】:
我刚开始接触 Mono 和 .NET 的东西,在阅读了一些关于 F# 的知识后,我决定尝试遵循这个关于 F# 和 MonoGame 的简单游戏教程:
http://bruinbrown.wordpress.com/2013/10/06/making-a-platformer-in-f-with-monogame/
整理了我从博客上复制粘贴的代码的许多语法错误后,我得到了这个代码:
module desnovro
open Microsoft.Xna.Framework
open Microsoft.Xna.Framework.Graphics
type Game1 () as x =
inherit Game()
do x.Content.RootDirectory <- "Content"
let graphics = new GraphicsDeviceManager(x)
let mutable spriteBatch = Unchecked.defaultof<SpriteBatch>
override x.Initialize() =
do spriteBatch <- new SpriteBatch(x.GraphicsDevice)
do base.Initialize()
()
override x.LoadContent() =
()
override x.Update (gameTime) =
()
override x.Draw (gameTime) =
do x.GraphicsDevice.Clear Color.CornflowerBlue
()
[<EntryPoint>]
let main argv =
use g = new Game1()
g.Run()
printfn "Desnovro!!!"
0
在 MonoDevelop 解决方案中,我创建了一个 F# 项目,其中引用了:
- FSharp.Core
- 系统
- System.Core
- Tao.Sdl
- MonoGame.Framework.Linux
- OpenTK
我添加了上面的文件,命名为Program.fs。我能够成功编译该项目,但是当我尝试运行它时,出现以下异常:
Unhandled Exception: System.TypeLoadException: Could not load type 'Game1' from assembly 'game, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not load type 'Game1' from assembly 'game, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
我的第一次尝试是将类定义和 main 函数放在单独的文件中(就像在教程中一样),但得到了相同的结果。如果我在主函数中注释掉对Game1 和g 的引用,程序将执行并打印我的消息“Desnovro!!!”成功。
出了什么问题以及如何解决?
我完全是 .NET 方面的初学者,但我认为,由于我了解 Haskell 并且喜欢函数式编程,因此我很快就会开始使用 MonoGame 和 F# 开发游戏。我使用的是 Ubuntu 13.10。
【问题讨论】:
-
Microsoft.Xna.Framework是用于 XNA 框架的 Microsoft 程序集——我认为您不能将它们与那里的引用一起使用。我希望本教程针对 Windows 平台。 -
微软XNA被废弃,不再开发游戏框架。 MonoGame 是一个积极开发的克隆,目前有许多针对 Linux、Mac 和其他非 Microsoft 平台发布的游戏。
Microsoft.Xna命名空间是其 Mycrosofty 遗产的不幸遗产。 -
我明白了,我在这里展示了我对 XNA/MonoGame 的无知。
-
可能是程序集加载器找不到某些引用的程序集 - 它们是安装在 GAC 中还是使用编译后的二进制文件复制到输出文件夹?
-
我认为这很可能是 Mono 或 MonoGame 问题。我在我的测试机器(Win 8 Pro x64 .Net 4.5 和 MonoGame 3.0.1)上测试了你的代码和我的原始代码,它工作正常。不幸的是,我不使用单声道,但快速的谷歌搜索表明这可能是由于缺少先决条件造成的。你能确认你已经安装了 OpenAL 等吗?
标签: .net f# mono monodevelop monogame