Java 动态更新pixmap的充分方法是什么?
目标Java 动态更新pixmap的充分方法是什么?,java,libgdx,pixmap,Java,Libgdx,Pixmap,目标 使健康栏在更新栏宽时执行速度快得惊人 在缩放时保持其质量(像素/米比率) 目前我正在使用libgdxPixmap创建健康条,但是当我将drawLine参数更改为新值时,突然仍然没有任何更改。下面的代码是我当前的工作代码,我不确定这是否是动态绘制Pixmap的充分方法 // This code is working when written all in update method Pixmap frame = new Pixmap(32, 3, Pixmap.Format.RGBA8
- 使健康栏在更新栏宽时执行速度快得惊人
- 在缩放时保持其质量(像素/米比率)
Pixmap
创建健康条,但是当我将drawLine
参数更改为新值时,突然仍然没有任何更改。下面的代码是我当前的工作代码,我不确定这是否是动态绘制Pixmap
的充分方法
// This code is working when written all in update method
Pixmap frame = new Pixmap(32, 3, Pixmap.Format.RGBA8888);
frame.drawRectangle(...);
frame.drawLine(...);
Texture texture = new Texture(frame);
frame.dispose();
batch.begin();
batch.draw(texture ...);
batch.end();
健康酒吧样品
你不应该为此而使用
Pixmap
(一般的经验法则是:如果你认为你需要使用Pixmap,那么你很可能是错的)。Pixmap
用于加载、存储或操作CPU内存:RAM中的图像数据。在CPU内存中操作图像数据的速度相对较慢,并且生成的数据不能用于在屏幕上渲染,例如使用SpriteBatch
为此,您需要将数据从CPU内存上传(复制)到GPU内存:VRAM。纹理
用于表示VRAM中的图像数据。因此,实际上,您可以通过创建一个纹理来实现这一点。或者,您可以通过调用texture.load(pixmap)
方法重用现有纹理。然而,将图像数据从RAM上传到VRAM的速度也相对较慢
因此,与其在CPU上操作图像数据,然后将其复制到GPU,不如直接使用GPU来实现您想要的。您没有提供足够的信息来说明您真正想要实现的目标,但是这里有一些选项可以帮助您开始
仅绘制完整条的一部分。假设您的图集中有一个表示完整健康状态栏的图像,您只想渲染其中的一部分,表示实际健康状态:batch.draw(region.getexture(),x,y,width*health,region.getU(),region.getV(),region.getU()+health*(region.getU2()-region.getU()),region.getV2())
(此处x
,y
,宽度
和高度
是条形图在世界坐标中的位置和大小,健康状况
是从0到1的标准化健康状况)
将纹理区域
缩放到条的大小。假设你的健康栏是完全不透明的,或者只有一条外线,那么你可以使用一个像素TextureRegion
并将其缩放为你想要的大小:barch.draw(区域,x,y,宽度*健康,高度)代码>
使用一个
使用,它提供了与Pixmap
几乎相同且更多的绘图功能,但它直接使用GPU
您不应该为此使用Pixmap
(一般的经验法则是:如果您认为需要使用Pixmap,那么您可能是错的)。Pixmap
用于加载、存储或操作CPU内存:RAM中的图像数据。在CPU内存中操作图像数据的速度相对较慢,并且生成的数据不能用于在屏幕上渲染,例如使用SpriteBatch
为此,您需要将数据从CPU内存上传(复制)到GPU内存:VRAM。纹理
用于表示VRAM中的图像数据。因此,实际上,您可以通过创建一个纹理来实现这一点。或者,您可以通过调用texture.load(pixmap)
方法重用现有纹理。然而,将图像数据从RAM上传到VRAM的速度也相对较慢
因此,与其在CPU上操作图像数据,然后将其复制到GPU,不如直接使用GPU来实现您想要的。您没有提供足够的信息来说明您真正想要实现的目标,但是这里有一些选项可以帮助您开始
仅绘制完整条的一部分。假设您的图集中有一个表示完整健康状态栏的图像,您只想渲染其中的一部分,表示实际健康状态:batch.draw(region.getexture(),x,y,width*health,region.getU(),region.getV(),region.getU()+health*(region.getU2()-region.getU()),region.getV2())
(此处x
,y
,宽度
和高度
是条形图在世界坐标中的位置和大小,健康状况
是从0到1的标准化健康状况)
将纹理区域
缩放到条的大小。假设你的健康栏是完全不透明的,或者只有一条外线,那么你可以使用一个像素TextureRegion
并将其缩放为你想要的大小:barch.draw(区域,x,y,宽度*健康,高度)代码>
使用一个
使用,它提供了与Pixmap
几乎相同且更多的绘图功能,但它直接使用GPU
您是否在render()中调用了所有这些函数?是的,当我调用所有函数时,它们都正常工作,但是有没有办法不调用所有函数?首先,您不需要为此实际创建pixmap。第二,也许你可以在课堂上创建pixmap字段,但我只是想了解你是否这样做:)顺便问一下,你在绘制直线和矩形时是否在更改pixmap颜色。我在绘制其纹理时正在更改线宽。你可以通过pixmap.setColor(…)更改pixmap颜色吗在绘制矩形和直线之间。当然,在绘制直线后将颜色更改为back。您的代码看起来很好。同时查看line和rectangle的参数会更好。您是否在render()中调用了所有参数?是的,当我调用所有参数时,它们工作正常,但有没有办法不调用所有参数?首先,您不需要为此实际创建pixmap。第二,也许你可以在课堂上创建pixmap字段,但我只是想知道你是否这样做:)顺便问一下,你在画直线和矩形时是否在改变pixmap的颜色