Articles of xna 4.0

理解图像旋转XNA C#

我不明白如何旋转我的图像我的作品。 这与Xbox Pad上的ThumbSticks有关吗? 或浮动的属性? 如果有人能向我解释这里发生的事情,我会非常感激。 图像是一个枪。 我想补充用拇指指向球员上方敌人的投篮,所以理解这一点至关重要。 图像和编码有它自己的类。 所以在Game1.cs中只有初始化,WMpos设置为字符并更新并绘制引用的方法,所以不影响旋转。 这里是所有相关的代码: public Texture2D WMtxr; public Vector2 WMorigin; public float WMrotation; public void UpdateMe(GameTime gameTime) { WMorigin = new Vector2(WMtxr.Width – 100, WMtxr.Height – 36); if (GamePad.GetState(PlayerIndex.One).ThumbSticks.Right.Y < -0.1) { WMrotation += 0.03f; } if (GamePad.GetState(PlayerIndex.One).ThumbSticks.Right.Y > 0.1) { WMrotation -= 0.03f; } } public void DrawMe(SpriteBatch […]

在XNA 4.0中加载savegame时出现NullReferenceException问题

我想启用我的程序加载“savegames”,我跟随MSDN上的教程,但是当我运行我的代码,我得到NullReferenceException错误。 我使用一个xml文件作为我的游戏数据容器,它可以工作,但是在这个时候,我必须重建我的游戏,每当我对该xml文件进行一些更改时,我都希望能够在运行期间完成这个工作。 xml文件存储在我的Content文件夹中。 这是我的加载方法的代码: public void Otvori() { IAsyncResult rezultat = device.BeginOpenContainer("OtvaranjeDemo", null, null); rezultat.AsyncWaitHandle.WaitOne(); container = device.EndOpenContainer(rezultat); rezultat.AsyncWaitHandle.Close(); if (!container.FileExists(imeDatoteke)) { container.Dispose(); return; } Stream stream = container.OpenFile(imeDatoteke, FileMode.Open); XmlSerializer serializer = new XmlSerializer(typeof(PostavkeStanice)); PostavkeStanice postavke = (PostavkeStanice)serializer.Deserialize(stream); stream.Close(); container.Dispose(); } 编译器抛出我在这一行的错误“IAsyncResult rezultat = device.BeginOpenContainer(”OtvaranjeDemo“,null,null);” 由于这是游戏库中的一种方法,我认为它与variables定义范围有关,但是我在游戏范围内声明了variables,并且在Update方法中使用了这个方法,所以不应该成为问题? 你有什么想法? 谢谢

XNA减去混合function不起作用

我想从图片中减去黑色圆圈背景的白色图像,得到一个照明圈,这里是白色的图像 所以我写了这个代码 spriteBatch.Begin(SpriteSortMode.Deferred, new BlendState { ColorBlendFunction = BlendFunction.Subtract, AlphaBlendFunction = BlendFunction.Subtract }); //Draw the white image with black circle spriteBatch.Draw(test, new Vector2(), Color.White); spriteBatch.End(); 我的目标是获得它与渲染的背景图像之间的差异 得到这样的东西 但是第一个图像只在第二个图像中绘制的结果低于它

XNA精灵画不正确

我有一个问题,通过我当前的代码,其中某些Texture2D没有正确绘制对方。 例如,在开始时,我将精灵字体绘制在背景图像上,当添加图像时,一半的文字不显示。 _sb.Draw(_background, new Rectangle(0, 0, 800, 480), Color.White); if (isPaused) _sb.DrawString(_bigFont, "Resume", new Vector2(295, 200), Color.Black); else _sb.DrawString(_bigFont, "Start", new Vector2(315, 200), Color.Black); 如果我改变屏幕上其他文本的值,那么文本似乎就会出现。 有什么我在这里失踪? 谢谢。

XNA Framework HiDefconfiguration文件不支持alpha混合

我得到以下错误,即使代码运行通过Draw可以两次,然后它的错误: 当使用rendertarget格式Single时,XNA Framework HiDefconfiguration文件不支持alpha混合或ColorWriteChannels。 我使用的BlendState是: BlendState newBlendState = new BlendState() { AlphaBlendFunction = BlendFunction.Add, AlphaSourceBlend = Blend.One, AlphaDestinationBlend = Blend.One, ColorBlendFunction = BlendFunction.Add, ColorSourceBlend = Blend.One, ColorDestinationBlend = Blend.One }; 我甚至在实际绘制被调用之前将SamplerStates设置为PointClamp : device.DrawUserIndexedPrimitives<VertexPositionTexture>(PrimitiveType.TriangleList, domeVerts, 0, 1024, ib, 0, 1860); 我不明白它是如何成功运行两次,然后失败。 任何帮助将不胜感激。 问题的屏幕截图:

在XNA中编译着色器时出现错误X3650

我试图转换XBDEV.NET马赛克着色器在我的XNA项目中使用,并遇到麻烦。 编译器错误,因为一半全局。 起初,我尝试更换全局variables,只是在代码中明确写入variables,但是这样会导致输出失败。 接下来,我尝试用float varsreplace所有的一半,但仍然会导致产生的图像。 我从SpriteBatch.Begin()调用效果文件。 有没有办法将这个着色器转换为新的像素着色器约定? 有没有什么好的教程这个话题? 以下是供参考的着色器文件: /*****************************************************************************/ /* File: tiles.fx Details: Modified version of the NVIDIA Composer FX Demo Program 2004 Produces a tiled mosaic effect on the output. Requires: Vertex Shader 1.1 Pixel Shader 2.0 Modified by: bkenwright@xbdev.net (www.xbdev.net) */ /*****************************************************************************/ float4 ClearColor : DIFFUSE = { 0.0f, 0.0f, 0.0f, 1.0f}; […]

如何摆脱if语句

我不确定这个标题是不是我真正想问的问题的准确expression,但那是我能想到的最好的。 我遇到了我的角色类问题。 我开发了一个系统,可以进行连锁攻击,对我来说重要的是1)在攻击过程中按下button不会中断这个字符,2)同时按下button应该被存储,以便玩家可以平稳地排队在一个中间的连锁攻击,使游戏玩法不感到僵化或没有反应。 这一切都是从玩家按下打孔button开始的。 当按下冲头button时,游戏在按下button时检查dpad的状态,然后将结果组合button转换为一个int,我将其用作与字符的冲压方法有关的枚举器。 枚举器被放置到List中,以便下一次调用该角色的Update()方法时,它将执行列表中的下一个冲压。 如果我的角色被标记为acceptInput为true,那么它只执行下一个拳头。 所有攻击标志acceptInput都为false,以防止攻击中断,然后在攻击结束时,acceptInput被设置为true。 在接受input的同时,所有其他操作都被轮询,即跳跃,跑步等。 在运行时,如果我攻击,然后在它后面排队(通过按+向前+冲),我可以看到第二个明显执行的攻击,应该标记acceptInput为false,但它会被打断,我的角色将停止冲孔并开始运行,如果我仍然按住dpad。 包括一些上下文的代码。 这是我角色的input区域。 //Placed this outside the if (acceptInput) tree because I want it //to be taken into account whether we are accepting input or not. //This will queue up attacks, which will only be executed if we are accepting input. //This creates a desired effect […]

围绕自己的Y轴XNA旋转模型

我的模型绕着它自己的Y轴旋转时遇到了麻烦。 模特是一个人。 当我testing我的世界时,模型被加载到0,0,0的位置。 当我从那里旋转我的模型时,模型正常旋转。 问题出现后,我把模型移动到一个新的位置。 如果我将模型向前,向左等移动,然后尝试在它自己的Y轴上旋转模型,模型将会旋转,但是仍然围绕原始位置以圆形方式旋转(想想自己在绳子上摆动,但是总是从中心向外)。 有谁知道如何保持更新的中心点?

如何在2个Vector3之间绘制纹理

我的场景:RTS作战风格,1个单位射击另一个单位 我的问题是我想绘制2 Vector3点之间的平坦纹理。 我看了各种广告牌的风格,但是这并没有给我一个适当的解决scheme。 我看了这个: http : //msdn.microsoft.com/en-us/library/bb464051.aspx BasicEffect和DrawPrimitives正确的解决scheme只是将纹理拉伸到原点到目标的距离? 我使用他们使用的四类,但我发现这似乎僵化 所以我对你的问题是我将如何去解决这类问题? 问候

脚本运动path(?)(XNA)

好吧,所以标题不是最大的,因为这是更一般的。 假设我想让玩家能够击中A,并让他们的船模向右滚动,并且在相机保持居中的同时转移到屏幕的右侧。 我是否可以通过编程来实现这一点(即为模型设置路标并保持相机的焦点不变)或者通过animation来实现(所以船模实际上是滚动和向右移动,只是播放这些帧)(我其实并不知道如何做这种3Danimation呢,还没有研究过,把它添加到我的待办事项列表中) 这是我知道的一个非常模糊的问题,我会尝试回答任何问题。 谢谢,彼得