OpenGL和9patch drawables

时间:2012-01-20 20:06:06

标签: android graphics opengl-es drawable

我正在使用opengl在android中制作一个破砖游戏,我决定使用9patch drawables,所以例如一块砖可以扩大到更宽或更高。这可能吗?

另外,我制作了我的图像,然后使用android工具文件夹中的draw9patch.exe来制作图像。这是相当多的工作,现在事实证明它为每一侧添加了几个像素,因此图像不再是两个的幂,它们必须是。

那么如何在openGL中使用九个补丁绘图?

3 个答案:

答案 0 :(得分:2)

  

那么如何在openGL中使用九个补丁绘图?

你没有。 9-patches和drawables用于常规的Android View类,而不是OpenGL。如果你想有类似的行为,你将不得不实现自己的OpenGL渲染逻辑,包括解析9补丁PNG。

答案 1 :(得分:1)

看起来NinePatchDrawable对象不允许您访问底层位图,但我想您可以将它们绘制到Canvas中,然后从中读取生成的位图。这可能会解决你的二次幂问题。

然后,您可以使用getPadding()读取填充区域,并将这些位置转换为0..1范围,以用作纹理坐标。

然后,在OpenGL中,您将使用九个四边形网格绘制纹理砖,如“#”符号。顶点的纹理坐标将是固定的,并对应于九个补丁填充。您的位置坐标取决于块的缩放比例。您可以保持角点尺寸相同,并根据需要缩放中心四边形。 (剩余的四边形将根据需要沿着一个维度缩放以保持一切连接起来。)

就个人而言,我倾向于忘记Android九补丁,而是采用砖艺术品的惯例,其中(比方说)宽度和高度的中间50%是可拉伸的,并且周围的25%部分周长不是。但是,取决于你扔掉了多少工作。

答案 2 :(得分:0)

  

所以图像不再是两个的力量,它们必须是。

如果您使用OpenGL-ES 2,则解除了限制。纹理可以是任意大小。