Articles of xna 4.0

将代码分割成DrawableComponents时,2D相机不起作用

我有下面的相机写的: public class Camera { public Vector2 Position; Viewport Viewport; public Matrix Transformation { get { return Matrix.CreateTranslation(new Vector3(-this.Position.X, -this.Position.Y, 0)) * Matrix.CreateRotationZ(0f) * Matrix.CreateScale(new Vector3(1f, 1f, 1)) * Matrix.CreateTranslation(new Vector3(Viewport.Width * 0.5f, Viewport.Height * 0.5f, 0)); } } public Camera(GraphicsDevice device) { this.Position = Vector2.Zero; this.Viewport = device.Viewport; } } 现在,虽然这可以在教程中工作,你可以像GameDraw一样绘制所有的绘图: protected override void […]

Game类来自哪里的DrawableGameComponent构造函数?

我正在使用Silverlight + XNA制作Windows Phone项目,但我不知道如何使用DrawableGameComponent因为构造函数需要一个Game类,如下所示: Planet.cs class Planet : DrawableGameComponent { public Planet(Game game): base(game){ { } 但在我的第一页Silverlight和XNA项目不是一个Game类是这样的: GamePage.xaml.cs public partial class GamePage : PhoneApplicationPage { … } 我在哪里可以findGame类传递给DrawableGameComponent构造函数?

试图检查一个点是否在线的错误的边缘

通过使用浮点数值,通过比较应该是相同的数量,就像呼吸一样简单地运行近似误差。 我想知道如果有一种方式建立在一些MSDN(或者甚至外部)的库为C#忽略问题。 一个例子可能是:比这样比较2个浮点值 if(myVector3.X == anotherVector3.X) 我会很感激这样的事情 if(myVector3.X.isInTheNeighbourhood(anotherVector3.X)) 我知道这个写得不好。 这只是为了简化说明。 我正在做的是检查一个点( Vector3 )是否在线段上。 所以基本上我做的计算只不过是 (x – x1)/(x2 – x1) = (y – y1)/(y2 – y1) = (z – z1)/(z2 – z1) 但是这些值并不总是相同的,所以我需要写下一些代码,其中包括一种宽容的邻居math概念,以接受足够接近线的值。 希望我明确自己。 有没有人为此提供解决scheme?

二维碰撞的角速度

我一直在为我的A Level计算项目开发一个2D物理引擎,并且在计算碰撞中的角速度时遇到了麻烦。 我已经设法锻炼每个物体的线速度,并创建一个碰撞stream形,其中包含碰撞点相对于碰撞质心(0,0)的两个物体中的每一个以及重叠等。我也知道每个物体的质量,速度等。我一直在寻找几个星期,现在在我能find的每一个方程中,他们似乎没有工作返回正常的碰撞难以置信的高数字。 我目前的algorithm从tuts +( 链接在这里 )的游戏开发部分的文章中拉出来,就像这样: objectArray[i].angularVelocity += objectArray[i].inverseMass * CrossProduct(collisionInfo.collisionPointB, impulse); objectArray[ii].angularVelocity += objectArray[ii].inverseMass * CrossProduct(collisionInfo.collisionPointA, impulse); 有人能解释我怎么能计算角速度的变化,并给我一些示例值的方程,因为我的可能是在错误的规模或什么的。 谢谢你的帮助,安迪 其他要注意的是,这个引擎是用C#编写的XNA,所以如果有任何语言特定的优化,他们必须使用C#,谢谢。

XNA模糊运动图像

为什么XNA模糊在两次抽奖之间移动less于1px的图片? 这很烦人,因为一切都看起来很模糊。 有没有办法禁用它? 我已经尝试将spritebatch的SamplerState的SamplerState设置为PointWrap的Begin函数,但是它将图像包装为像素,因此它们移动起伏不定。 有什么建议么? 谢谢! 我的SpriteBatch的Begin函数: spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend); 编辑 : public class Image:IDisplay { public Texture2D texture; private BaseModel model; private Vector2 position; private Util.DISPLAY_LAYERS layer; public Image(String asset, BaseModel _model) { model = _model; texture = Main.current.Content.Load<Texture2D>(asset); DisplayManager.add(this, model.layer); } } 这就是Image类的样子(没有附加函数),这就是被调用的draw函数。 public void Draw(SpriteBatch batch) { if (model== null) { batch.Draw(texture, position, […]

我可以依靠SoundEffects被卸载时停止?

我正在使用XNA的SoundEffect类来播放声音。 出于技术原因,我必须从相应的ContentManager unload所有声音,而其中一些仍在播放。 unload时仍然在播放的声音(通过SoundEffect实例)会发生什么? 看来,他们突然停下来。 这是我可以依赖的确定性行为吗? unloading当前正在播放的声音时是否会导致错误?

基于到物体的距离的比例适应

我有上面的图像说明情况,名称显示在播放器上。 文字呈现为3D矩形,并旋转到面对相机作为广告牌。 (我正在使用这篇文章http://blogs.msdn.com/b/shawnhar/archive/2011/01/12/spritebatch-billboards-in-a-3d-world.aspx )我只是想要的大小文字总是一样的。 有没有什么常用的方法来自适应地根据距离缩放对象?

适当的方向灯在多个型号上

我一直在试图实现一个定向光进入我正在做的XNA游戏,但由于某种原因,我似乎无法让定向光成为一个真正的定向光。 相反,我坚持定向点光源。 在这种情况下,“方向点光”意味着“每个模型都有一个适当的定向光源,但是光线来自一个固定点,而不是偏离模型的位置”。 我想要的是定向光来自每个模型的偏移量,以便每个模型,不管位置,将从相同的角度点亮。 例如:如果我有2个立方体(单独的模型),c1在(0,0,0)和c2在(4,0,4),我的光线方向为(0,2,2),我站在(6,0,-3)我想看到顶部,左侧(如果我能看到它),我的立方体的面被点亮,但是我得到了c1的背面,左面和顶面,但右面,c2灯的前面和上面,这不是我想要的。 当前的着色器代码 // Global world variables float4x4 World; float4x4 View; float4x4 Projection; // Ambient Lighting variables float3 AmbientColor; float AmbientIntensity; // Diffuse Lighting variables float3 DiffuseColor; float DiffuseIntensity; float3 DiffuseLightDirection; // Texturing variables Texture ModelTexture; // Texture sampler sampler TextureSampler = sampler_state { texture = <ModelTexture> ; magfilter = LINEAR; minfilter […]

XNA 4中的RenderState

我正在阅读本教程的透明度,可以用来解决我的问题在这里 。 代码是用XNA 3编写的,但是我用的是XNA 4。 以下代码在XNA 4中有什么替代? device.RenderState.AlphaTestEnable = true; device.RenderState.AlphaFunction = CompareFunction.GreaterEqual; device.RenderState.ReferenceAlpha = 200; device.RenderState.DepthBufferWriteEnable = false; 我搜查了很多,但没有发现任何有用的东西。

XNA Texture.GetData“传入的数据的大小对于此资源来说太大或太小”。

我试图通过创建一个新的颜色,并为给定的精灵传递源矩形的宽度和高度来检索位于纹理图集上的给定精灵的颜色数据。 然后我将这个颜色variables传递给XNA的Texture.GetData方法,如下所示。 在运行时执行此代码时,我收到以下消息:“传入的数据的大小对于此资源来说太大或太小”。 Texture2D texture = level.Tiles[x, y].Texture; Rectangle source = level.Tiles[x, y].Source; Color[] colorData = new Color[source.Width * source.Height]; texture.GetData(colorData); 据我所知,这种方法应该像之前在应用程序中使用其他spritesheet一样工作。 请问有人能解释为什么这样的信息会被抛在首位,我怎么解决呢?