标签: monogame

如何在MonoGame中获取基础窗口?

我正在将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)

xna opentk monogame

5
推荐指数
1
解决办法
2584
查看次数

monogame内容加载文件未找到异常

以下帖子看起来与我的问题类似,但最终它看起来与所有细节看起来并不完全一样,所以我打电话来防止声称它的相同.

我在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> …

c# mono android monogame xamarin

5
推荐指数
2
解决办法
5431
查看次数

Monogame XNA从少量Draw()调用中获得低帧率

我一直在使用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)

xna frame-rate draw monogame spritebatch

5
推荐指数
1
解决办法
1844
查看次数

如何在monogame中设置固定的窗口大小?

我正在制作一个简单的游戏作为最终项目.它将在窗口中显示一个.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.

c# fullscreen monogame windows-8

5
推荐指数
1
解决办法
4678
查看次数

MonoGame与SDL

使用MonoGame与C#和SDL与C++的主要区别是什么?

哪个更容易使用?哪个推荐用于多平台支持?

对于我们来说,拥有结构和无所不在的OOP非常重要.它应该是高效的,但不能以生产力为代价(例如,不重新发明轮子或管理记忆).我们是一个小团队,因此我们需要一个结构化,简单明了的框架,这使我们能够专注于实际工作.

c# c++ sdl monogame

5
推荐指数
1
解决办法
4369
查看次数

Xamarin realease构建更小的尺寸

我使用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大小

c# android monogame xamarin

5
推荐指数
1
解决办法
2917
查看次数

如何创建基于 MonoGame 的类库以在 UWP、iOS 和 Android 上使用

我已经安装了 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 中使用?

android visual-studio ios monogame win-universal-app

5
推荐指数
1
解决办法
2114
查看次数

错误:找不到“freetype6.dll”

最近我在使用 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。但是,问题仍然存在......

c# visual-c++ monogame content-pipeline visual-c++-2012

5
推荐指数
1
解决办法
4003
查看次数

如何在 Visual Studio 2019 社区版中打开一个新的 MonoGame 桌面项目?

我听说 MonoGame 是 XNA 的替代品,但我不知道如何打开桌面项目。

具体来说,我应该安装什么工作负载才能在 Windows 上开发 MonoGame 项目?

windows monogame visual-studio-2019

5
推荐指数
1
解决办法
7279
查看次数

在 F# 中运行 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)

.net f# monogame

5
推荐指数
1
解决办法
517
查看次数