将纹理拆分为拼图块在libgdx中
由于性能问题,我试图将基于Android Canvas的游戏转换为Libgdx。 目前,我必须生成拼图拼图(动态)时遇到问题。
我做了什么:我使用了android位图操作(Path和PorterDuff)并生成了拼图,然后将其输入到AndroidLauncher中的Libgdx Game对象。
问题1 :有没有更好的方法将位图转换为libgdx核心项目中的拼图块。 (见下文)
问题2 :如何创建一个区域来表示拼图。 (基于边界框或宽度/高度的解决方案不适合),以便用户可以在他/她仅触摸该纹理区域时拖动该部分。
问题3 :检测相邻拼图块何时被用户移近彼此的最佳方法。
在LibGdx中创建拼图益智游戏的最佳方式。 有一种替代方法可以通过使用遮罩来实现LibGdx中Image的碎片。 掩蔽是通过创建着色器程序实现的,即对于这个问题,我们必须编写1.Vertex着色器2.Fragment Shader 3.创建着色器程序4.创建自定义精灵批处理。 有关着色器的更多信息: https : //github.com/libgdx/libgdx/wiki/Shaders
着色器程序如下所示:在顶点着色器下面进行掩蔽: –
-
顶点着色器:顶点着色器负责对顶点执行操作。
`uniform mat4 u_projTrans;
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; } `
2.Fragment Shader:片段着色器以与顶点着色器非常相似的方式起作用。 但是不是在顶点上处理它,而是为每个片段处理一次。
`#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; }`
-
使用Vertex和片段着色器创建着色器程序:
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(); }
}
4.用于屏蔽的自定义精灵批次:
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: https : //github.com/mattdesl/lwjgl-basics/wiki/ShaderLesson2
- 检索项目的父项时出错:找不到与给定名称“Theme.AppCompat.Light”匹配的资源。 我的R.java失踪了
- Android 4 JSON生成错误:我可以使用比捆绑版本更新版本的org.JSON库吗?
- 有没有办法在Java类中使用gradle变量
- 如何使用multipart将REQUEST值添加到HTTP POST方法以将文件上传到Android中的PHP服务器?
- 如何基于元素大小动态地为每个行添加不同列宽的GridLayout元素?
- Android:在android中的Web视图中显示pdf从服务接收的字节
- Android + Eclipse项目通过SVN共享?
- 从JSON webservice中检索android中的byte
- android活动类构造函数工作