问题标签 [spritebatch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1261 浏览

c# - Xna spriteBatch 在不同的类

我即将准备好撕掉我的头发,因为 spriteBatch() 只是没有“点击”我。我似乎无法在网上找到任何可以涵盖我在这种确切情况下使用它的东西,这让我相信我错过了一些非常简单的东西。

我在我的 XNA 项目中有一个名为 player 的类,令人惊讶的是,它控制播放器、物理等。但我一次一步地采取它。第一步:在关卡中绘制玩家。关卡代码效果很好,不用担心。但我无法让玩家画画。

我有一个基本的 Texutre2D 纹理,用于我在油漆中绘制的精灵。按照教程,我应该能够做到以下几点:

它应该可以正常工作。但不是。在我的这个玩家类别中,我缺少一些东西。1) 在 LoadContent() 中,我无法创建一个new SpriteBatch(),因为GraphicsDevice不存在也不能随便创建。它出现在 Game.cs 中,并this以游戏本身的含义进行初始化。好的。但我也不能引用 Game.GraphicsDevice。

这基本上是整个问题,其他一切都源于此。我找不到解决办法。有谁知道尝试这样做的正确方法?我似乎无法确切地找到我缺少的东西来让它工作。

0 投票
1 回答
75 浏览

xna-4.0 - XNA 4.0:由 SpriteBatch 引起的地形故障

我正在尝试在 XNA 中实现地形碰撞,所以我添加了一些动态文本,让我可以测试计算是否正确。一切都很好,直到我打电话:

spriteBatch.Begin(); spriteBatch.End();

或者

spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend); spriteBatch.End();

有了这些说明,地形会出现一点小故障,当我从代码中删除这两行时,一切都恢复正常(但这意味着我无法绘制 HUD)

任何人都有任何线索可能导致这种情况以及我应该如何解决它?

屏幕:

开启精灵批处理

关闭精灵批处理

0 投票
1 回答
182 浏览

c# - XNA - 如何改变绘制字符串列表的方向

您如何使用 spritebatch 绘制字符串列表,使其看起来像这样;

代替项目 1 项目 2 项目 3 项目 4 或代替:

0 投票
1 回答
450 浏览

matrix - Xna Sprite 位置和视口

我是 XNA 的新手,正在玩 spritebatch。有一个我无法解决的问题。

我有一个名为 Sprite 的类。这个精灵有一个 Vector2,它存储了精灵在屏幕内的位置。我使用 Spritebatch 绘制精灵,调用如下:

想象一下,我用这种类型的坐标设计了一个场景或屏幕。也许有一个地板应该在我的场景的底部。当我将它放置在固定位置并且有人以更大的分辨率播放它时,地板不会位于我场景的底部。

有没有办法在独立于视口宽度和高度的定义空间内工作?

我在这里阅读了几篇文章。是先渲染到 RenderTarget 然后缩放它并将其渲染到视口的唯一解决方案吗?

我希望你能帮助我,保护我不要发疯:)!

谢谢。

0 投票
1 回答
161 浏览

c# - XNA:来自 Texture2D 的多边形源

我有问题。使用 SpriteBatch,我只能从源 Texture2D 中绘制一个矩形区域。

请帮助我找到方法,如何从源纹理中绘制多边形或圆形区域。我正在创建 2d 精灵游戏。

在此先感谢,丹尼斯

0 投票
1 回答
2031 浏览

xna - 少数 Draw() 调用导致 Monogame XNA 低帧率

我一直在使用 MonoGame 将我在 XNA 中制作的滚动射击游戏移植到 Linux 上。几乎一切都进行得很顺利,但我在一个特定的地方遇到了一个问题,调用 SpriteBatch.Draw() 会削弱帧速率。大多数游戏运行良好,没有任何打嗝。它一次吸引大量敌人和大量子弹而没有任何减速。然而,导致丢帧的部分是分层滚动背景。代码的相关部分在这里。

级别.cs:

上面的“scrollingBackground”是一个ScrollingBackgroundLayers的列表,其相关部分是:

ScrollingBackgroundLayers.cs:

一旦我注释掉对 ScrollingBackgroundLayer.Draw() 的调用,所有帧速率问题都会消失,因此这似乎是一个很大的暗示,即问题来自 SpriteBatch 尝试绘制滚动层。显然,我想弄清楚为什么会这样。我研究了 SpriteBatches 的其他一些问题,我发现可能指向答案的最常见的事情是,每当纹理更改时都会创建一个新的 SpriteBatch,但即使将 SpriteSortMode 设置为 Texture 也没有任何改进。

帧速率下降发生在具有 7 个不同 ScollingBackgroundLayers 的游戏阶段,每个阶段绘制一个大约 700 像素宽和 900 高的单独纹理(每个层应该这样做不超过 2 次以考虑滚动效果) . 我觉得我必须遗漏一些明显的东西,因为游戏有时会使用完全相同的过载渲染多达 2-300 颗子弹,所以另外 14 次调用应该是杯水车薪。这仅仅是尝试绘制太大的纹理以使 SpriteBatch 无法有效处理的问题吗?这在 Windows 版本上不是问题,所以我想知道是否没有特定于平台的解决方法,或者 MonoGame 的 Draw 实现是否效率低下。欢迎任何反馈。

感兴趣的人的完整来源:

Linux - https://github.com/cmark89/AsteroidRebuttal-Linux
Windows - https://github.com/cmark89/AsteroidRebuttal

编辑:我尝试对其进行更多修改。我更改了对 Draw() 的调用以确保目标矩形等于屏幕的可绘制区域,但没有明显的变化。我将纹理换成一个非常小的纹理,这样就消除了延迟,所以我想它确实与纹理的大小有关。

编辑 2:好吧,我最终只是硬着头皮切开了我正在使用的透明层(就像某种不懒惰的人)。它解决了这个问题,大概是因为它不再需要渲染大量无用的像素,但它仍然让我想知道为什么这只是 Linux 上的一个问题。尽管我暂时已经解决了我的问题,但我还是会暂时搁置一下,以防万一有人知道是什么导致了巨大的性能差异。

0 投票
2 回答
360 浏览

xna - 使用 XNA SpriteBatch 的倾斜效果

Windows Phone 有一个很好的按钮倾斜效果,如下图所示:

地铁倾斜效果

是否可以使用在 XNA 中重新实现此行为SpriteBatch?我可以检测到触摸位置并计算矩形角应该在的点,但我不知道如何使用这种失真来渲染图像。

0 投票
1 回答
266 浏览

c# - XNA for Windows Phone 中的广告牌透明度

好的,希望有一个我只是没有看到的简单修复:我正在尝试在广告牌上实现透明度以进行爆炸,但是在 png 文件本身中没有定义透明的像素的地方,精灵保持稳定。我正在尝试通过乘以透明度来更改Color.White透明度(float介于 0 和 1 之间的值)

有没有明显的错误?还是 Windows Phone 7 的 XNA 无法以 3D 形式呈现透明物体?

0 投票
1 回答
382 浏览

xna - MonoGame Spritebatch 仅部分绘制 TileField

我目前正在使用 MonoGame 开发一个自上而下的游戏,该游戏使用图块来指示位置是否可步行。瓷砖的大小为 32x32(图像也有)

一个 200 x 200 的网格正在填充墙砖(并且应该使用随机生成器创建路径和房间),但是当我在屏幕上绘制所有瓷砖时,很多瓷砖都不见了。下面是一个图像,在位置 (x81 y183) 之后,瓷砖根本没有绘制?

http://puu.sh/3JOUO.png

用于填充数组的代码将墙砖放在网格上,砖的位置是它的数组位置乘以父用于相机位置的砖大小(32x32)

绘制时,我只是遍历所有图块并相应地绘制它们。这就是 Game.Draw 函数中发生的事情

map.draw 函数调用这个函数,它基本上绘制每个图块。我尝试设置一个计数器来计算每个图块的绘制调用被命中的次数,每次更新绘制函数被调用 40000 次,这是我使用的图块数量。所以它把它们都画了,但我仍然没有在屏幕上看到它们

这是绘制瓷砖的代码。当前图像始终为 0 并且GlobalPosition是图块的位置减去相机位置

我为代码墙道歉。对我来说这一切看起来都很简单,但我似乎无法找出为什么它没有绘制所有的瓷砖。对于未绘制的瓷砖可见仍然是真实的,并且currentImage是 0 它应该是

0 投票
1 回答
607 浏览

c# - XNA 4.0 SetRenderTarget result in full purple screen

I'm currently making a 2D side-scroller game with XNA for my personal project. My goal for the moment is to have fun with shaders. But I'm actually stuck by the SetRenderTarget(RenderTarget2D) method, I don't understand why once i call it the game gets a full purple screen.

I searched everywhere and I still don't understand where the problem is, but i think its maybe due to my way of beginning the spritebatch.

Any ideas ? Thanks in advance :)