C#XNA检索矩形内的像素

时间:2014-05-25 09:28:25

标签: c# xna krypton

我在制作简单的游戏时偶然发现了一个问题并且已经坚持了很长一段时间,我希望任何人都可以为我提供一个优雅的解决方案或向正确的方向迈出一步。

我目前有一个简单的自上而下的卷轴,播放器现在只是一个白色立方体,并且在地图周围旋转了由Krypton制作的45度光锥。 玩家必须避免被灯光看到,所以我试图创建一个像素碰撞 当玩家落入点亮区域范围内时触发事件的方法。

Krypton有一个属性可以返回光线周围的边界矩形,但是我无法将其用于碰撞,因为它会在整个光区域周围绘制一个巨大的正方形,因此即使你也会检测到玩家站在灯光后面。我想要准确。

我也尝试在照亮区域周围绘制一个三角形,但这里的问题是它不像我想要的那样准确,因为有些光照在走廊上,我不能准确地拾取静态三角形,加上三角形穿过墙壁,因为光线的范围实际上大于地图的一半,但大部分只是被影子船体封锁。玩家必须能够隐藏在墙后面的所述灯光下。这是我的意思的图像示例。 Image

所以我认为最好的方法是检查播放器的一个像素的颜色是否已经改变为某个RGB值。这需要一些硬编码,但这是一个简单的游戏,所以我不介意这种方法。但在这里我遇到了一些麻烦。

我读到了Texture2D.GetData<>方法,我可以这样做,但是它会返回实际导入纹理的颜色数组,它总是白色的。它不会返回后处理结果。这是有道理的,因为场景中可以有多个纹理。

我尝试的下一个是GraphicsDevice.GetBackBufferData<>,它返回视口的所有像素,这会立即将我的FPS降低到无,重载只能检索某个范围内的像素,但它们似乎对我不起作用因为我总是对索引异常感到惊讶。以下是我在使用此方法时尝试的内容:

Color[] colors = new Color[10]
GraphicsDevice.GetBackBufferData<Color(colors, 0, 10);

(只是一个例子,但我似乎无法理解为什么这不起作用。)

因此,或多或少地切入追逐,我正在寻找一种方法来检索某个区域的颜色数组或我的视口的坐标,所以我可以比较所述数组中的所有颜色,看看它们是否比赛。

道歉,如果它有点长,但我会非常感谢任何建议或指导,因为我不知道我缺少什么,我已经按照大多数关于这个的教程,他们似乎都比较了颜色值纹理两个碰撞纹理,但如果我没有弄错,纹理本身实际上从来没有改变颜色,因为它只是一个被绘制的导入资产。我想我需要检索绘制纹理的WHERE的颜色,以正确检查是否有变化。

亲切的问候

修改

我得到它的工作,GetBackBufferData中的矩形作为参数运行良好,禁用MultiSampling使滞后不存在。感谢您的建议,@BjarkeSøgaard和@ thomas88wp。

Color colorArray = new Color[player.Bounds.Width * player.Bounds.Height];
Color[] colors = new Color[player.Bounds.Width * player.Bounds.Height];
GraphicsDevice.GetBackBufferData<Color>(rec, colors, 0, colors.Count());

0 个答案:

没有答案