Java 在libgdx中将纹理拆分为拼图块
由于性能问题,我正在尝试将基于android画布的游戏转换为Libgdx。目前我面临的问题,当我不得不生成拼图拼图精灵(动态) 我所做的:我使用android位图操作(路径和PorterDuff)生成拼图块,然后将其输入AndroidLauncher中的Libgdx游戏对象 问题1:在libgdx核心项目中,是否有更好的方法将位图转换为拼图块。(见下文) 问题2:如何创建一个区域来表示拼图块。 (边界框或基于宽度/高度的解决方案不适用),因此用户可以在仅接触该纹理区域时拖动该块Java 在libgdx中将纹理拆分为拼图块,java,android,bitmap,opengl-es,libgdx,Java,Android,Bitmap,Opengl Es,Libgdx,由于性能问题,我正在尝试将基于android画布的游戏转换为Libgdx。目前我面临的问题,当我不得不生成拼图拼图精灵(动态) 我所做的:我使用android位图操作(路径和PorterDuff)生成拼图块,然后将其输入AndroidLauncher中的Libgdx游戏对象 问题1:在libgdx核心项目中,是否有更好的方法将位图转换为拼图块。(见下文) 问题2:如何创建一个区域来表示拼图块。 (边界框或基于宽度/高度的解决方案不适用),因此用户可以在仅接触该纹理区域时拖动该块 问题3:检测相
问题3:检测相邻拼图块何时被用户移动到彼此更近的最佳方法。在LibGdx中创建拼图游戏的最佳方法。有一种替代方法可以通过使用遮罩从LibGdx中的图像中获得片段。遮罩是通过创建一个着色器程序来实现的,即对于这个问题,我们必须编写一个 1.顶点着色器 2.碎片着色器 3.创建一个着色器程序 4.创建自定义雪碧批次。 有关着色器的详细信息: 着色器程序如下所示: 下面是用于遮罩的顶点着色器:-
attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;
varying vec4 v_color;
varying vec2 v_texCoord0;
void main()
{
v_color = a_color;
v_texCoord0 = a_texCoord0;
gl_Position = u_projTrans * a_position;
} `
`#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D u_texture;
uniform sampler2D u_mask;
varying vec4 v_color;
varying vec2 v_texCoord0;
void main()
{
vec4 texColor = texture2D(u_texture, v_texCoord0);
vec4 mask = texture2D(u_mask, v_texCoord0);
texColor.a *= mask.a;
gl_FragColor = v_color * texColor;
}`
public class MyShader {
private FileHandle fragmentShader = Gdx.files.internal("fragment.glsl");
private FileHandle vertexShader = Gdx.files.internal("vertex.glsl");
public ShaderProgram myShader = new ShaderProgram(this.vertexShader,
this.fragmentShader);
public MyShader () {
this.myShader .begin();
this.myShader .setUniformi("u_texture", 0);
this.myShader .setUniformi("u_mask", 1);
this.myShader .end();
}
} batch.setShader(MyShader.myShader);
this.alphaTexture.bind(1);
this.color.getTexture().bind(0);
batch.enableBlending();
Color c = getColor();
batch.draw(this.color, getX(), getY(), getOriginX(),
getOriginY(),
getWidth(), getHeight(), getScaleX(), getScaleY(), 0.0f);
batch.setShader(null);
无着色器:在LibGdx中创建拼图游戏的最佳方法。有一种替代方法可以通过使用遮罩从LibGdx中的图像中获得片段。遮罩是通过创建一个着色器程序来实现的,即对于这个问题,我们必须编写一个 1.顶点着色器 2.碎片着色器 3.创建一个着色器程序 4.创建自定义雪碧批次。 有关着色器的详细信息: 着色器程序如下所示: 下面是用于遮罩的顶点着色器:-
attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;
varying vec4 v_color;
varying vec2 v_texCoord0;
void main()
{
v_color = a_color;
v_texCoord0 = a_texCoord0;
gl_Position = u_projTrans * a_position;
} `
`#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D u_texture;
uniform sampler2D u_mask;
varying vec4 v_color;
varying vec2 v_texCoord0;
void main()
{
vec4 texColor = texture2D(u_texture, v_texCoord0);
vec4 mask = texture2D(u_mask, v_texCoord0);
texColor.a *= mask.a;
gl_FragColor = v_color * texColor;
}`
public class MyShader {
private FileHandle fragmentShader = Gdx.files.internal("fragment.glsl");
private FileHandle vertexShader = Gdx.files.internal("vertex.glsl");
public ShaderProgram myShader = new ShaderProgram(this.vertexShader,
this.fragmentShader);
public MyShader () {
this.myShader .begin();
this.myShader .setUniformi("u_texture", 0);
this.myShader .setUniformi("u_mask", 1);
this.myShader .end();
}
} batch.setShader(MyShader.myShader);
this.alphaTexture.bind(1);
this.color.getTexture().bind(0);
batch.enableBlending();
Color c = getColor();
batch.draw(this.color, getX(), getY(), getOriginX(),
getOriginY(),
getWidth(), getHeight(), getScaleX(), getScaleY(), 0.0f);
batch.setShader(null);
ShaderLesson:我认为这很难通过代码实现。难道你不能画出每一个拼图块并创建一个函数来画出每一个拼图块并使大图像消失吗?你可能希望看到使用box 2d和rube editor进行触摸检测和碰撞。(如果你想让它们精确的话)你可以使用阿尔法面具。谢谢你的回复。你能告诉我更多的信息吗。还有如何解决问题2和3。我认为这将很难通过代码实现。难道你不能画出每一个拼图块并创建一个函数来画出每一个拼图块并使大图像消失吗?你可能希望看到使用box 2d和rube editor进行触摸检测和碰撞。(如果你想让它们精确的话)你可以使用阿尔法面具。谢谢你的回复。你能告诉我更多的信息吗。还有如何解决问题2和问题3。另外请看:<>另外请看:<>