问题标签 [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 回答
948 浏览

c# - 什么是平铺纹理的更经济的方法?

我正在开发一个基于瓷砖的 2d 游戏。我将事物拆分为诸如天空背景、陆地背景、城镇、UI 等组件,每个组件都处理其绘图。在调用任何绘图调用之前,我spritebatch.Begin()使用默认值,以便我在 1 批次中绘制所有内容。

为了绘制土地质量,我在该区域反复绘制方形土地纹理,直到将其填满。然而,有一种spriteBatch叫做的模式就是linear wrap这样做的。不利的一面是,我将不得不通过将我的一个全局spritebatch.begin()多次拆分为每个组件来更改我的设计。

所以我的问题是什么更好/更经济,手动平铺纹理或拆分子组件之间的begin()end()

还有其他问题可能需要我拆分一个spriteBatch.Begin(),那么额外的 1 个有多重要spriteBatch.Begin()?还是10多个?还是100多个?我想知道我应该以什么规模开始担心添加更多begins().

0 投票
1 回答
2998 浏览

java - libgdx:SpriteBatch 未使用 PerspectiveCamera 显示

虽然我确实具备 OpenGL 的基本知识,但我只是从 libgdx 开始。

我的问题是:为什么,具有完全相同的代码但仅从 OrthographicCamera 切换到 PerspectiveCamera 的效果不再显示我的任何 SpriteBatches ?

这是我使用的代码:

创建()方法:

和 render() 方法:

现在,如果在我的 resize(int width, int height) 方法中,我像这样设置相机:

我明白了:

在此处输入图像描述

但是,如果我更改相机类型:

我明白了:

在此处输入图像描述

我问的原因是因为我真的很喜欢 libgdx 内置的在 OpenGL 中绘制文本(字体)的能力。但是在他们的示例中,他们使用了 SpriteBatch,他们将其路径到 Font 实例,并且他们也总是使用 Ortho Camera。我想知道 SpriteBatch 和字体绘图功能是否适用于 PerspectiveCamera。

0 投票
1 回答
1170 浏览

c# - Viewport.Project 问题

在我的 XNA 游戏中,我使用 Viewport.Project 来获取太阳 3D 坐标的 2d 屏幕坐标(主要是因为它看起来不错)。我得到了这个工作,但是,当我朝太阳的相反方向看时,我看到了其中的两个(从技术上讲,一个)。我不知道这里发生了什么..

有谁知道发生了什么?我怎样才能防止这种情况发生?

为了帮助可视化这一点,这是我正在谈论的图像: 超链接图像,没有 10+ 代表

这是代码:

0 投票
1 回答
741 浏览

c# - XNA - 剔除性能问题

这种绘制我的瓷砖的方法似乎很慢,我不确定到底出了什么问题,它相信我的剔除方法不起作用并且在屏幕外绘制东西,但我不完全确定。这里是:

GetTileSetTypes 是一个函数,用于获取它周围的瓦片,用于不同的纹理,如 DirtBlock_North、DirtBlock_Center 等。

平铺内容只是我的块纹理的一个类。

0 投票
0 回答
116 浏览

c# - Spritebatch 设置导致向后剔除或其他任何东西的东西

对于我编写的 cel 着色器,边缘检测仅适用于 2D 纹理/渲染目标。因此,我调整了渲染方法,以便将纹理绘制到渲染目标,渲染目标设置为纹理并使用 SpriteBatch 绘制。

除了,SpriteBatch(似乎?)忽略了我的设置:

显然会正确绘制对象。然而,事实并非如此。

在此处输入图像描述

0 投票
1 回答
3379 浏览

c# - XNA BlendState 与 SpriteBatch

我们需要一个 BlendState 来执行以下操作:

  • 透明PNG按预期绘制,保留其后面的任何内容
  • 我们用来Color.White按原样绘制PNG
  • 我们将改变颜色的 alpha 通道来改变纹理的“不透明度”

为了获得这种效果,BlendState.AlphaBlend如果我们将 alpha 设置为 100 或 255 以外的任何数字,则它很接近,但会绘制白色作为透明部分。

所以我们尝试了这个:

这行得通,但如果两个 PNG 相互重叠,我们现在会得到不希望的效果。基本上我们会得到一些奇怪的线条,看起来像是在添加像素数据(或其他东西)。

例子:

在此处输入图像描述

实际上,BlendState.AlphaBlend是这样的:

图像看起来比上面更好:

在此处输入图像描述

但是随后 alpha 不起作用,使用 100 作为 alpha 将用白色替换背景。

我们BlendState应该使用什么来从 SpriteBatch 中获得我们想要的效果?我们可以使用不同的颜色,例如Color.Black有另一种方法可以让它工作。

*PS - 另一个不错的功能是如果我们可以Color.Red用来“着色”纹理,但我们希望它首先能够正常工作。

0 投票
3 回答
6726 浏览

xna - 为什么 Vector2(来自 XNA 的库)使用 float 而不是 int?

为什么Vector2(来自 XNA 的库)使用float而不是int

计算机屏幕上的位置以像素为单位,因此光标位置可以由两个整数定义。没有半个像素这样的东西。那我们为什么要使用浮点数呢?

SpriteBatch类中,我发现了 7 个称为Draw的重载方法。他们两个人:

所以我们可以看到Draw接受intfloat坐标。

我在实现游戏对象的屏幕坐标时遇到了这个问题。我认为Rectangle是保存对象大小和屏幕坐标的不错选择。但现在我不确定...

0 投票
2 回答
1950 浏览

c# - RenderTarget2D 将所有 alpha 紫色着色

所以,我正在尝试将我的游戏玩法渲染到 XNA 中的 RenderTarget2D,这样我就可以将着色器应用到场景中。它在某种程度上是有效的,但任何以 255 以外的 alpha 级别绘制的东西似乎都被染成了紫色。alpha 效果有效,但也有紫色色调。我试图四处寻找解决方案,我似乎唯一能找到的要么是全屏呈现紫色,要么是 alpha 被紫色替换。

我的问题不完全是那些......

染紫!

这是我抛出的一个场景,向你展示发生了什么。如您所见,alpha 效果正在工作,但对象被染成紫色。

这是我发布渲染代码的部分:

这是我正在使用的初始化。

renderEffect 是效果文件,Sprite 是处理相对于假定屏幕尺寸的绘图(以应对不同的分辨率)的类。

我在 XNA 3.1 中工作。我知道我现在应该使用 4.0,但我不是因为我有 3.1 的书,这在某些情况下很有帮助。

无论如何,这里的一些帮助将不胜感激......

0 投票
1 回答
2052 浏览

c# - XNA 通过 SpriteBatch 和 Content 作为参考

最近我开始将 XNA 与 MonoMac 一起使用。我上课有问题。我想创建一个里面有纹理和位置信息的类。我也想做绘图功能。

我的想法是传递 spriteBatch 和 Content arround,这样我就可以加载纹理并在之后绘制它们。然而,我传递给这个对象的内容对象不加载任何纹理,当我在类之外尝试内容时,它加载的纹理很好,所以纹理必须在那里。

这就是我创建实例的方式:

也许我试图使用错误的模型。也许我不应该在类中使用 spritebatch 和 Content,但是我可以让 spritebatch 和 content 全局化吗?

感谢您的帮助

0 投票
1 回答
3165 浏览

android - LibGDX SpriteBatch 多纹理可能吗?

我很高兴使用 LibGDX 框架的 SpriteBatch 类。我的目标是通过着色器修改精灵的表示。

我从 SpriteBatch 类中复制了默认着色器并添加了另一个统一的 Sampler 2d

有没有一种工作方法可以将纹理赋予着色器。这样做,总是以 ClearColor 屏幕结束。

每个纹理单独工作。在 Mesh Class 的帮助下手动绘制可以按预期工作。那么我该怎么做才能使用 SpriteBatch 的便利性呢?

寻求帮助