标签: monogame

更改Farseer Physics Engine设置以提高性能

我已成功使用Farseer使用XNA开发我的一款游戏.游戏就像Windows和WP7中的魅力一样.我目前正致力于使用MonotouchMonogameIOS中移植我的游戏.我已成功编译和使用Farseer,而不是我的游戏的第一个版本移植到Monotouch和Monogame.一切都很好,除了表演.iPhone设备上的游戏运行速度要慢得多.我做了一些代码调查,似乎主要的瓶颈是Farseer.当它需要连接一个固定装置(圆圈)来管理超过5-6个实体时,它变得非常慢.

阅读文档我注意到要调整Farseer我可以更改Setting static class中的值:

性能

为了充分利用引擎,您应该尝试遵循以下指南:

启用睡眠 睡眠使您可以拥有世界上大量的身体.它还可以增加发动机的稳定性,因为一堆物体中的小运动不会在堆叠中扩散.睡眠的身体几乎没有头顶,因此建议启用它.

禁用CCD 连续碰撞检测可防止隧道效应,但会降低性能.如果你没有隧道问题,你应该一起禁用CCD.

最小化位置和速度迭代 的次数大量的迭代使得引擎以性能为代价更加稳定.您应该调整值以适合您的游戏.

坏消息是如果我改变那个类的任何值,似乎什么也没发生.我尝试更改值如下:

EnableDiagnostics = false
VelocityIterations = 6
PositionIterations = 2
ContinuousPhysics = false
Run Code Online (Sandbox Code Playgroud)

我也尝试使用较低的值,如VelocityIterations = 1,但似乎没有任何改变....

任何人都已更改设置类值以提高性能?

iphone farseer xamarin.ios monogame

6
推荐指数
1
解决办法
1063
查看次数

MonoGame阅读触摸手势

我目前正在使用梦幻般的monogame框架编写游戏.我无法正确对触摸输入作出反应.当用户水平或垂直拖动时,我想每次拖动执行一次动作.问题是每次拖动都会多次发出手势.这是我的代码:

var gesture = default(GestureSample);

while (TouchPanel.IsGestureAvailable)
    gesture = TouchPanel.ReadGesture();

if (gesture.GestureType == GestureType.VerticalDrag)
{
    if (gesture.Delta.Y < 0)
        return new RotateLeftCommand(_gameController);

    if (gesture.Delta.Y > 0)
        return new RotateRightCommand(_gameController);
}

if (gesture.GestureType == GestureType.HorizontalDrag)
{
    if (gesture.Delta.X < 0)
        return new RotateLeftCommand(_gameController);

    if (gesture.Delta.X > 0)
        return new RotateRightCommand(_gameController);
}
Run Code Online (Sandbox Code Playgroud)

出于本示例的目的,我已将所有此代码移动到一个块中.然后返回的RotateRightCommand或RotateLeftCommand由调用代码执行,该调用代码在屏幕上旋转对象.整个代码块在monogame的更新循环中运行.我认为我在重置触摸输入方面缺少一些东西,这就是我为一次拖动返回3或4个RotateCommands的原因.我究竟做错了什么?

c# iphone xamarin.ios monogame

6
推荐指数
1
解决办法
1万
查看次数

MonoGame和Microsoft.XNA.Framework名称空间之间的模糊引用

MonoGame(一个基本上将XNA引入Windows Phone 8的框架)具有前缀的所有名称空间,Microsoft.Xna.Framework我相信最小化将XNA应用程序移植到MonoGame时所需的代码更改量.

我的问题是,我希望访问Microphone该类,因为尚未在MonoGame中创建,我必须在官方的Microsoft XNA类中从内部使用它,这需要取出明确的强制删除标准Microsoft.XNA.Framework.dll引用. .csproj,我的MonoGame模板已设置为避免冲突,这很好用,现在Microphone可以访问,但这样做我在Microsoft标准问题和MonoGame中存在的几个关键类之间产生了歧义.

我收到的错误是:

不明确的参考:
Microsoft.Xna.Framework.Color
Microsoft.Xna.Framework.Color

这显然是因为除了标准的Microsoft发布的XNA库之外,我还引用MonoGame.Framework.dll了命名空间的命名空间,从而产生了这种模糊性.但是,在所有情况下,我都希望访问MonoGame版本.

任何想法如何我可以明确地告诉编译器使用ColorVector2类的MonoGame版本而不是官方的微软版本?

任何using Color = Microsoft.Xna.Framework明显的尝试都不会起作用,因为它们在编译的dll中都被标记为相同!

c# xna monogame windows-phone-8

6
推荐指数
1
解决办法
2591
查看次数

C#如何从内存中完全删除对象

我有一个C#应用程序,包含一个带有多个数据透视表的Pivot.正常的数据透视表正确卸载并且不会泄漏内存.在其中的两个项目中,我有Drawingsurfaces,我使用Monogame来渲染3d模型.在卸载和装载他们的枢轴时,我试图完全破坏,然后完全重新创建"游戏"实例(主要是因为Monogame不允许你现在绘制到两个表面,因为他们使用了大量的内存,并且对他们两个来说都不够).

我的问题在于,当我处理加载时创建的Xamlgame时,它不释放它使用的所有内存.这意味着每次重新创建Xamlgame时,它都会开始使用越来越多的内存,直到不再剩下来为止.因此,我想知道是否有任何C#方法可以完全处理加载对象时使用的所有内存.

任何Monogame特定方式也将受到赞赏.目前我首先处理我的顶点和索引缓冲区,然后我清除了我的顶点和索引列表,然后我处理了我的Basiceffect和我的Graphicsdevicemanager,然后我在"游戏"本身上调用dispose,最后我创建了变量包含等于null的"游戏".

PS.如果您曾在XNA中完成此操作,那么您也可以帮助我,因为语法基本相同.

编辑(可能是MonoGame bug):

我现在已经设法正确清理所有缓冲区等.但是我的BasicEffect仍然存在内存泄漏.我已经尝试将其处理并使其为null,但不管它每次重新加载我的轴时它只是继续使用越来越多的内存.

c# xna windows-phone monogame windows-phone-8

6
推荐指数
3
解决办法
1万
查看次数

VS2012,C#,Monogame - 加载资产异常

我几天来一直在与这些问题作斗争,浏览网络,但没有任何帮助我解决它:我在Visual Studio 2012上创建一个MonoGame应用程序,但在尝试加载纹理时,我遇到以下问题:

无法加载Menu/btnPlay资产!

我已设置内容目录:Content.RootDirectory ="Assets"; 此外,文件btnPlay.png还具有以下属性:构建操作:内容和复制到输出目录:如果较新则复制.

我的构造函数和LoadContent函数是完全空的,但看看自己:

public WizardGame()
{
    Window.Title = "Just another Wizard game";

    _graphics = new GraphicsDeviceManager(this);

    Content.RootDirectory = "Assets";
}

protected override void LoadContent()
{
    // Create a new SpriteBatch, which can be used to draw textures.
    _spriteBatch = new SpriteBatch(GraphicsDevice);

    Texture2D texture = Content.Load<Texture2D>("Menu/btnPlay");

    _graphics.IsFullScreen = true;
    _graphics.ApplyChanges();
}
Run Code Online (Sandbox Code Playgroud)

我很乐意提供任何帮助!我对这个问题非常绝望....

c# xna monogame visual-studio-2012

6
推荐指数
1
解决办法
1035
查看次数

在Xamarin Studio中的Android项目上进行3D建模

我在Xamarin中有一个现有的解决方案,用于我正在开发的应用程序.但是我需要做一些3D渲染作为其中的一部分.

我看过MonoGame但是我看不到任何方法可以直接将它作为另一个活动导入,这样我就可以使用标准的Android API轻松切换到它.

是否有另一个更容易使用的库,因为我没有任何3D建模经验,除了乱搞Unity.

monogame xamarin

6
推荐指数
1
解决办法
138
查看次数

为Xamarin/Monogame打开屏幕键盘

我正在使用Xamarin/Monogame开发游戏,我需要在他们点击我的输入控件时在移动设备上打开键盘.我认识到我可以Keyboard.GetState()在使用模拟器和键盘时捕获输入,但真正的用户将拥有物理设备,我需要打开屏幕键盘才能输入信息.我没有在任何描述这个的文档中看到任何内容,但很难相信我是第一个碰到这个问题的人.我在输入时查看了Xamarin/Monogame的文档,并且我已经阅读了这篇StackOverflow文章.如果您需要更多信息来帮助我解决此问题,请与我们联系.在此先感谢您的帮助.

c# android on-screen-keyboard monogame xamarin

6
推荐指数
1
解决办法
1462
查看次数

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
查看次数

无法在代码中加载上面定义的类

我刚开始使用这个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
Run Code Online (Sandbox Code Playgroud)

在MonoDevelop解决方案中,我创建了一个F#项目,其中引用了:

  • FSharp.Core
  • 系统
  • System.Core程序
  • Tao.Sdl
  • MonoGame.Framework.Linux
  • OpenTK …

.net mono f# monodevelop monogame

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

如何在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
查看次数