2012-07-31 120 views
1

我是一个初学者到XNA和我与我的Windows Kinect的新尝试于是决定遵循教程:http://digitalerr0r.wordpress.com/2011/06/20/kinect-fundamentals-2-basic-programming/绘制到屏幕上

这样一个我注意到,后所有的颜色都呈淡蓝色。例如rgb 20,20,20的颜色看起来像深蓝色而不是深灰色。

我注意到GraphicsDevice.Clear()正在使用Color.CornflowerBlue。我尝试将它改为Color.Black,果然所有的东西都变成了黑色。

GraphicsDevice.Clear(color)和绘制到屏幕上的颜色之间的关系是什么?

这是我画的功能:(按照要求,在回答的形式)

/// <summary> 
/// This is called when the game should draw itself. 
/// </summary> 
/// <param name="gameTime">Provides a snapshot of timing values.</param> 
protected override void Draw(GameTime gameTime) 
{ 
    GraphicsDevice.Clear(Color.Black); 

    spriteBatch.Begin(); 
    spriteBatch.Draw(kinectRGBVideo, new Rectangle(0, 0, 640, 480), Color.White); 
    spriteBatch.DrawString(font, connectedStatus, new Vector2(20, 80), Color.Black); 
    spriteBatch.End(); 

    base.Draw(gameTime); 
} 
+0

尝试在[spriteBatch.Begin()]调用时更改[BlendState](http://msdn.microsoft.com/zh-cn/library/microsoft.xna.framework.graphics.blendstate_members.aspx) (http://msdn.microsoft.com/en-us/library/ff433698.aspx)方法。这决定了如何将颜色混合在一起绘制在彼此之上。 – 2012-07-31 06:28:16

+0

不错!它的工作非常好,将其改为答案,我会接受它。哦,顺便说一下,你知道为什么使用BlendState.Opaque会导致文本显示为块。 – 2012-07-31 06:48:41

回答

3

尝试在spriteBatch.Begin()方法的调用改变BlendState。这决定了如何将颜色混合在一起绘制在彼此之上。

我不确定为什么BlendState.Opaque显示文本为块,但我的猜测是这种混合状态不支持alpha。因此,文本周围的透明区域变得不透明,使文本看起来像一个矩形。我现在没有工具来检查这个猜测,所以我可以验证它。

+0

这个猜测很有意义,很可能是原因。感谢你的回答! – 2012-07-31 07:56:32

+1

你说“不透明”。这正是发生的情况。这对于绘制3D模型非常有用 - 对于精灵来说不是那么重要。 – 2012-07-31 14:06:52