我正在将Gleed2D从XNA 转换为MonoGame.
Gleed2D是一个实例化的Windows窗体应用程序XnaGame.在window由创建Game然后被隐藏和DeviceWindowHandle被设定为的Canvas主窗体上.
我知道这有点拗口; 代码说明了一切:在这里它是完整的.
相关位在构造函数中:
_drawSurface = mainForm.GetHandleToCanvas();
_graphics = new GraphicsDeviceManager( this )
{
PreferredBackBufferWidth = 800,
PreferredBackBufferHeight = 600
} ;
_graphics.PreparingDeviceSettings += graphics_PreparingDeviceSettings;
_winform = (Form)Form.FromHandle(Window.Handle);
_winform.VisibleChanged += game1VisibleChanged;
_winform.Size = new Size(10, 10);
Mouse.WindowHandle = _drawSurface;
Size pictureBoxSize = _mainForm.CanvasSize ;
ResizeBackBuffer( pictureBoxSize.Width, pictureBoxSize.Height ) ;
... some other stuff....
void graphics_PreparingDeviceSettings(object sender, PreparingDeviceSettingsEventArgs e)
{
e.GraphicsDeviceInformation.PresentationParameters.DeviceWindowHandle = …Run Code Online (Sandbox Code Playgroud) 以下帖子看起来与我的问题类似,但最终它看起来与所有细节看起来并不完全一样,所以我打电话来防止声称它的相同.
我在Xamarin Studio中关注这个monogame教程(目前在第2步):
当我在步骤2结束时运行生成的单一游戏应用程序时,当我点击试图加载播放器内容的代码行时,我得到以下异常(粘贴在最后).我将播放器内容文件设置正确AFAIK,将其复制到输出文件夹,但我假设它以某种方式未正确部署到Andriod虚拟机(AVM),我无法弄清楚如何检查部署内容.我拉起Android Monitor来探索AVM,并试图弄清楚它的位置,但我没有任何运气搞清楚......文件未找到异常似乎很清楚AVM上运行的是什么找到内容文件...但我无法弄清楚如何纠正它.
任何帮助将不胜感激,谢谢!
我遇到这个问题的来源和项目都在这里
我看到的例外如下: [MonoDroid] UNHANDLED EXCEPTION:Microsoft.Xna.Framework.Content.ContentLoadException:无法将Graphics\player资产加载为非内容文件!---> Microsoft.Xna.Framework.Content.ContentLoadException:打开流错误.---> Java.IO.FileNotFoundException:抛出了类型'Java.IO.FileNotFoundException'的异常.[MonoDroid的]在Android.Runtime.JNIEnv.CallObjectMethod(IntPtr的jobject,IntPtr的jmethod,Android.Runtime.JValue [] PARMS)[0x00000]在:0 [MonoDroid的]在Android.Content.Res.AssetManager.Open(System.String文件名)[0x00000]在:0 [MonoDroid的]在Microsoft.Xna.Framework.TitleContainer.OpenStream(System.String名)[0x00000]在:0 [MonoDroid的]在Microsoft.Xna.Framework.Content.ContentManager.OpenStream(系统.String assetName)[0x00000] in:0 [MonoDroid] ---托管异常堆栈跟踪结束--- [MonoDroid] java.io.FileNotFoundException:android.content.res中的Content/Graphics/player.xnb [MonoDroid] .AssetManager.openAsset(Native Method)[MonoDroid]在android.content.res.AssetManager.open(AssetManager.java:315)[MonoDroid]在android.content.res.AssetManager.open(AssetManager.java:289)[MonoDroid ]在mono.java.lang.RunnableImplementor.n_run(本机方法)[MonoDroid]在mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29)[MonoDroid]在android.os.Handler.handleCallba ck(Handler.java:605)[MonoDroid]在android.os.Handler.dispatchMessage(Handler.java:92)[MonoDroid]在Android.os.Looper.loop(Looper.java:137)[MonoDroid]. app.ActivityThread.main(ActivityThread.java:4424)[MonoDroid] at java.lang.reflect.Method.invokeNative(Native Method)[MonoDroid] at java.lang.reflect.Method.invoke(Method.java:511)[ MonoDroid]在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)[MonoDroid] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)[MonoDroid] at dalvik .system.NativeStart.main(Native Method)[MonoDroid] [MonoDroid] ---内部异常堆栈跟踪结束--- Microsoft.Xna.Framework.Content.ContentManager.OpenStream(System.String assetName)[MonoDroid] [ 0x00000] in:0 [MonoDroid] at Microsoft.Xna.Framework.Content.ContentManager.ReadAsset [Texture2D](System.String assetName,System.Action1 recordDisposableObject)[0x00000] in:0 [MonoDroid] ---内部异常结束堆栈跟踪--- [MonoDroid]在Micr SampleShooter.Game1上的Microsoft.Xna.Framework.Content.ContentManager.Load(字符串)<0x000c3> [MonoDroid]中的osoft.Xna.Framework.Content.ContentManager.ReadAsset(string,System.Action1)<0x0042c> [MonoDroid]. LoadContent()在Microsoft.Xna.Framework.Game.Initialize <0x0018b> [MonoDroid的]()<0x0023f> [MonoDroid的]在SampleShooter.Game1.Initialize()<0x00037> [MonoDroid的]在Microsoft.Xna.Framework.Game.在Microsoft.Xna.Framework.Game.DoUpdate(Microsoft.Xna.Framework)的Microsoft.Xna.Framework.AndroidGamePlatform.BeforeUpdate(Microsoft.Xna.Framework.GameTime)<0x0002b> [MonoDroid]上的DoInitialize()<0x00037> [MonoDroid] .GameTime)<0x0002f> [MonoDroid]在Microsoft.Xna.Framework.Game.Tick()<0x00493> …
我一直在使用MonoGame将我在XNA中制作的滚动射击游戏移植到Linux上.几乎所有事情都进展顺利,但我在一个特定的地方遇到问题,调用SpriteBatch.Draw()会削弱帧速率.大多数游戏运行良好,没有任何打嗝.它同时吸引了大量的敌人和大量的子弹而没有任何减速.但是,导致丢帧的部分是分层滚动背景.代码的相关部分在这里.
Level.cs:
public void Draw(SpriteBatch spriteBatch)
{
foreach (ScrollingBackgroundLayer sbl in scrollingBackground)
{
sbl.Draw(spriteBatch);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的"scrollingBackground"是ScrollingBackgroundLayers的列表,其相关部分是:
ScrollingBackgroundLayers.cs:
Vector2[] scrollingBackgroundImages;
public float DrawLayer;
public ScrollingBackgroundLayer(GameScene newScene, Texture2D texture, float scrollSpeed, Color color)
{
layerColor = color;
layerSpeed = scrollSpeed;
layerTexture = texture;
thisScene = newScene;
Initialize();
}
public void Initialize()
{
scrollingBackgroundImages = new Vector2[2];
for (int i = 0; i < 2; i++)
{
scrollingBackgroundImages[i] = new Vector2(0, thisScene.ScreenArea.Height - (layerTexture.Height * i));
}
}
public void Update(GameTime gameTime) …Run Code Online (Sandbox Code Playgroud) 我正在制作一个简单的游戏作为最终项目.它将在窗口中显示一个.bmp框架,我无意在游戏运行时调整窗口大小,所以我想修复窗口的大小.问题是当我运行在visual studio 2012中选择monogame游戏创建的项目时,它以全屏模式启动.我尝试使用此代码修复它:
_graphics.IsFullScreen = false;
_graphics.PreferredBackBufferWidth = 640;
_graphics.PreferredBackBufferHeight = 480;
_graphics.Applychanges();
Run Code Online (Sandbox Code Playgroud)
我把它放在主游戏类的构造函数和初始化函数中,但它什么也没做.我正在使用monogame 3.0.
使用MonoGame与C#和SDL与C++的主要区别是什么?
哪个更容易使用?哪个推荐用于多平台支持?
对于我们来说,拥有结构和无所不在的OOP非常重要.它应该是高效的,但不能以生产力为代价(例如,不重新发明轮子或管理记忆).我们是一个小团队,因此我们需要一个结构化,简单明了的框架,这使我们能够专注于实际工作.
我使用monogame和xamarin studio为android做了一个游戏.我切换到"发布"版本,当我构建我的解决方案时,.apk是35.6MB.请注意,我将其复制到手机上并安装它并且可以正常工作.但是我怎么能减小这个尺寸?http://developer.xamarin.com/guides/android/advanced_topics/application_package_sizes/在他们的网站上,他们提到了一些关于"链接"的例子,他们将"hello world"项目从15.8MB减少到4.4MB.我真的不明白我怎么能做到这一点,因为他们没有给出任何指示.你们任何人都知道怎么做?
更改"链接"保存,重建解决方案,然后重新调整并没有改变生成的.apk大小
我已经安装了 VisualStudio 2015、Xamarin 和 MonoGame 3.5。我将为 Windows UWP、iOS 和 Android 构建 XNA 应用程序。
我有一些基于 XNA 的库...我需要为三个目标系统(Windows UWP、iOS 和 Android)构建它们,但无法为 Windows UWP 创建库。我尝试创建一个MonoGame Windows 10 Universal Project,但这样的项目无法转换为生成 DLL。
我也尝试过创建一个Class Library (Universal Windows)项目,但后来无法添加MonoGame.Framework到引用中。
我在创建时遇到同样的问题MonoGame Android Project...无法切换到库项目。唯一可以修改为库项目的 MonoGame 项目是MonoGame iOS Project.
也就是说,如何创建一个基于 XNA (MonoGame) 的类库以便在 UWP、iOS 和 Android 中使用?
最近我在使用 MonoGame Content Pipeline 工具时遇到了一些麻烦,无法加载纹理。错误消息表示找不到“freeimage.dll”。我在 MonoGame 论坛上查找了解决方案,最后下载了 64 位版本的 Visual C++ Redistributable Package 2012。这解决了我的问题,内容管道可以再次加载 .png 文件。现在管道工具在加载 .spritefont 文件时遇到问题。它说缺少“freetype.dll”。所有这些丢失的 .dll 文件是怎么回事?我刚刚下载了 VC++ Redistributable Package,但它只修复了纹理,而不修复字体。
我尝试下载 Visual C++ Redistributable Package 2017。但是,问题仍然存在......
我听说 MonoGame 是 XNA 的替代品,但我不知道如何打开桌面项目。
具体来说,我应该安装什么工作负载才能在 Windows 上开发 MonoGame 项目?
我正在尝试使用 F#,我想看看是否可以在 F# 中使用 Monogame 做一些简单的事情。我认为从 C# 到 f# 的转换会很简单,但到目前为止还不是这样。到目前为止,我的代码只是一个应该运行的简单的空项目。或者至少在 C# 中是这样。然而在 F# 中运行它会产生
Unhandled exception. System.InvalidOperationException: No Graphics Device Service
Run Code Online (Sandbox Code Playgroud)
我的代码是这样的,它确实没有做任何疯狂的事情。我被迫对 spritebatch 使用可变的 val,因为无论出于何种原因,您都必须在 LoadContent 中实例化它。有人能指出我做错了什么吗?我将不胜感激。
type GameState =
inherit Game
new() = { inherit Game(); Sb = null; }
member this.Gfx : GraphicsDeviceManager = new GraphicsDeviceManager(this)
val mutable Sb : SpriteBatch
override this.Initialize() =
this.Content.RootDirectory <- "Content"
this.IsMouseVisible <- false
base.Initialize ()
override this.LoadContent () =
this.Sb <- new SpriteBatch(this.Gfx.GraphicsDevice)
base.LoadContent ()
override this.UnloadContent () =
base.UnloadContent () …Run Code Online (Sandbox Code Playgroud) monogame ×10
c# ×5
android ×3
xamarin ×2
xna ×2
.net ×1
c++ ×1
draw ×1
f# ×1
frame-rate ×1
fullscreen ×1
ios ×1
mono ×1
opentk ×1
sdl ×1
spritebatch ×1
visual-c++ ×1
windows ×1
windows-8 ×1