我正在尝试使用MonoGame为mac启动一个新项目.我已经安装了我认为必需的所有东西但是当我运行新项目时(单声道游戏徽标应该弹出)我在输出中得到这两行:
加载程序集:/Users/Kristin/Projects/Test/Test/bin/Debug/Test.app/Contents/MonoBundle/Test.exe加载程序集:/Users/Kristin/Projects/Test/Test/bin/Debug/Test.app /Contents/MonoBundle/MonoMac.dll [外部]
并且启动的新应用程序挂起而不会弹出窗口.我尝试按照此页面上的步骤操作:http://jamie.ly/wordpress/programming/software/setting-up-a-monogame-mac-application-with-xamarin-studio/
但似乎没有什么能解决我的问题.有任何想法吗?
这是我在StackOverflow上提出的第一个问题.我想问一下更有经验的游戏开发者哪个更好MonoGame或Unity3D.我的目的是学习其中一个,使我能够使用C#创建自己的Android和可能的Windows游戏.哪些最适合创建Android游戏?我正在寻找主要制作2D游戏的方法.如果有人可以概述这些工具之间的区别,除了一个是引擎而另一个是框架之外,我们将不胜感激.如果这篇文章中的任何内容听起来很愚蠢或不正确,我也会道歉.在我的辩护中,我是游戏开发的初学者.
我正在开发一款游戏,我们一直在以JSON格式存储我们的关卡信息.这些级别非常大,所以我们切换到只将它们存储在普通的C#中:
例:
private OurObject Autogenerated_Object1()
{
return new OurObject { Name = "Object1", X = 1, Y = 2, Width = 200, Height = 100 };
}
Run Code Online (Sandbox Code Playgroud)
除了这些方法非常大并且具有其他对象的嵌套列表/字典等.
这加快了将级别从2-3秒加载到几分之一秒的时间(在Windows上).我们的数据大小也相当小,因为编译的IL与JSON相比.
问题是当我们在MonoDevelop中为MonoTouch编译这些时,我们得到:
mtouch exited with code 1
随着-v -v -v开启,我们可以看到错误:
MONO_PATH=/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app /Developer/MonoTouch/usr/bin/arm-darwin-mono --aot=mtriple=armv7-darwin,full,static,asmonly,nodebug,outfile=/var/folders/4s/lcvdj54x0g72nrsw9vzq6nm80000gn/T/tmp54777849.tmp/monotouch.dll.7.s "/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/monotouch.dll"
AOT Compilation exited with code 134, command:
MONO_PATH=/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app /Developer/MonoTouch/usr/bin/arm-darwin-mono --aot=mtriple=armv7-darwin,full,static,asmonly,nodebug,outfile=/var/folders/4s/lcvdj54x0g72nrsw9vzq6nm80000gn/T/tmp54777849.tmp/DrawAStickmanCore.dll.7.s "/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/DrawAStickmanCore.dll"
Mono Ahead of Time compiler - compiling assembly /Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/DrawAStickmanCore.dll
* Assertion: should not be reached at ../../../../../mono/mono/mini/mini-arm.c:2758
Run Code Online (Sandbox Code Playgroud)
在编译AOT时,方法中的行数是否有限制?我们可以通过一些论证mtouch来解决这个问题吗?有些文件工作正常,但特别是导致错误的文件有3000行方法.无论如何编译模拟器都能正常工作.
这仍然是一个实验,所以我们意识到这是一个非常疯狂的情况.
我的代码是
new GameFont(Content.Load<SpriteFont>("LoadingFont"), "LoadingFont")
根据我所读到的,您必须使用VS2010将您的资产编译为.xnb格式,我已经完成了,并将它们放入bin目录中的Content子文件夹,我也做过.但是,我收到错误消息"无法加载LoadingFont资产!".
我不确定还能做什么.我读了一篇很老的帖子说使用XNA 4制作的资产不起作用,但我不知道是否仍然如此,或者如何将我的XNA版本更改为3.1.
有任何想法吗?也许没有使用VS2010会有更好的方法吗?
我通常SpriteBatch在XNA/Monogame中使用2D游戏,并且最近刚刚研究DrawUserIndexedPrimatives过诸如此类的3D绘图方法.我正在开展一个项目,我们的动画师希望能够剪切精灵和纹理.
有了SpriteBatch你可以在一个矩阵传递SpriteBatch开始剪切的对象.就像是:
//translate object to origin
Matrix translate1 = Matrix.CreateTranslation(-rectangle.X, -rectangle.Y, 0);
//skew the sprite 33 degrees on the X and Y axis
Matrix skew = Matrix.Identity;
skew.M12 = (float)Math.Tan(33 * 0.0174532925f);
skew.M21 = (float)Math.Tan(33 * 0.0174532925f);
//translate object back
Matrix translate2 = Matrix.CreateTranslation(rectangle.X, rectangle.Y, 0);
Matrix transform = translate1 * skew * translate2;
_spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied,
SamplerState.PointWrap, DepthStencilState.Default,
RasterizerState.CullCounterClockwise, null, transform);
_spriteBatch.Draw(_texture, rectangle, Color.White);
_spriteBatch.End();
Run Code Online (Sandbox Code Playgroud)
明显的缺点是它需要你SpriteBatch为每个剪切的精灵进行一个新的开始和结束调用.我们目前只需要2个电话即可SpriteBatch开始游戏.一个用于UI,一个用于世界的东西.我们的艺术家想要使用剪切来做摇晃的树木或动物的腿和四肢的动物,所以如果我们给他们选择,我可以看到这个数字跳到10多个不同的批次.
平均水平有大约250个元素,每个元素包含10-20个精灵.
我已经为Android编写了一个测试,调用1000个精灵.没有任何偏斜,它可以在大约11秒或大约53fps中绘制所有1000,600次.但是,如果我倾斜每十个精灵(增加100个新的 …
我正在使用Monogame和C#开发游戏.我有一个wpf应用程序,用于全屏启动的菜单.当我点击菜单上的播放时,我会进入Monogame项目.如何在全屏启动Monogame解决方案,就像使用wpf菜单一样?
我是MonoGame库的新手.我从.xnb文件加载纹理
_background = content.Load<Texture2D>(_backgroundKey);
Run Code Online (Sandbox Code Playgroud)
然后我想在运行时更改透明度(alpha).
哦,我发现自己该怎么做
spriteBatch.Draw(texture, position, sourceRect, Color.White * 0.5f, .......);
Run Code Online (Sandbox Code Playgroud)
这行代码将以半透明度绘制纹理.
好的,所以我把一个我一直在研究的游戏移植到Monogame,但是我现在有一个着色器问题,因为它被移植了.这是一个奇怪的错误,因为它适用于我的旧XNA项目,它也是我第一次在新的monogame项目中使用它,但除非我重新启动游戏,否则它也不会.
着色器是一个非常简单的着色器,可以查看灰度图像,并根据灰色从查找纹理中选择一种颜色.基本上我每次在屏幕上放置一个新的敌人时,都会使用它为一个敌人随机化一个精灵图像.它首次生成敌人,但在此之后不起作用,只是给出一个完全透明的纹理(不是空纹理).
另外,我现在只针对Windows桌面,但我计划在某些时候针对Mac和Linux.
这是着色器代码本身.
sampler input : register(s0);
Texture2D colorTable;
float seed; //calculate in program, pass to shader (between 0 and 1)
sampler colorTableSampler =
sampler_state
{
Texture = <colorTable>;
};
float4 PixelShaderFunction(float2 c: TEXCOORD0) : COLOR0
{
//get current pixel of the texture (greyscale)
float4 color = tex2D(input, c);
//set the values to compare to.
float hair = 139/255; float hairless = 140/255;
float shirt = 181/255; float shirtless = 182/255;
//var to hold new color
float4 swap;
//pixel …Run Code Online (Sandbox Code Playgroud) 作为前言,完全相同的代码在XNA中工作得很好,但是Monogame会引发异常.这可能需要熟悉Monogame渲染管道的人.
在我的游戏的Draw部分中,有一个ShadowmapResolver渲染出一个纹理,它是给定光源的最终计算光模式.从什么本质上呈现时,它的接收异常EffectPass.Apply()抱怨从某处内单从那里有一个尝试投int32[]来Single[].这是我的代码调用它:
private void ExecuteTechnique(Texture2D source, RenderTarget2D destination,
string techniqueName, Texture2D shadowMap)
{
graphicsDevice.SetRenderTarget(destination);
graphicsDevice.Clear(Color.Transparent);
resolveShadowsEffect.Parameters["renderTargetSizeX"].SetValue((float)baseSizeX);
resolveShadowsEffect.Parameters["renderTargetSizeY"].SetValue((float)baseSizeY);
if (source != null)
resolveShadowsEffect.Parameters["InputTexture"].SetValue(source);
if (shadowMap != null)
resolveShadowsEffect.Parameters["ShadowMapTexture"].SetValue(shadowMap);
resolveShadowsEffect.CurrentTechnique = resolveShadowsEffect
.Techniques[techniqueName];
try
{
foreach (EffectPass pass in resolveShadowsEffect.CurrentTechnique.Passes)
{
pass.Apply(); // <--- InvalidCastException re-enters my program here
quadRender.Render(Vector2.One * -1, Vector2.One);
}
}
catch (Exception ex)
{
Util.Log(LogManager.LogLevel.Critical, ex.Message);
}
graphicsDevice.SetRenderTarget(null);
}
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪:
at Microsoft.Xna.Framework.Graphics.ConstantBuffer.SetData(Int32 offset, Int32 rows, Int32 columns, Object data)
at Microsoft.Xna.Framework.Graphics.ConstantBuffer.SetParameter(Int32 …Run Code Online (Sandbox Code Playgroud) 我正在为学校做作业,我们用monogame做一个小游戏,还有在F#工作的额外挑战.游戏逻辑是完全不可变的F#,并且通过使用monogame中的Game类,入口点在C#中.然而,我遇到了一个关于F#中记录类型的奇怪问题.在逻辑(F#)中,我有以下几点:
...
module Vectors =
type Vector = {
x : double
y : double
}
let Zero : Vector = {x=0.0; y=0.0}
...
Run Code Online (Sandbox Code Playgroud)
在C#中,我有一些访问Zero的代码:
...
player.vector = Vectors.Zero;
...
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我尝试使用player.vector时,它会显示为null.调试时,Vector.Zero也为null.我四处寻找一些解决方案,这可能是一些微不足道的错误,但我似乎无法找到它.
monogame ×10
c# ×7
xna ×3
.net ×1
3d ×1
android ×1
aot ×1
drawing ×1
f# ×1
game-engine ×1
installation ×1
monomac ×1
shader ×1
spritebatch ×1
textures ×1
transparency ×1
wpf ×1
xamarin ×1
xamarin.ios ×1