1

我有个问题。所以我只是把我的第一款游戏放到了 Google Play 上。这是一个简单的桥梁建设游戏。

我自己有三星 Galaxy S Plus 在 Android 2.3.6 上运行。该游戏在我的手机、索尼 Xperia Ray、HTC Gratia 和三星 Ace 上运行良好。

将我的游戏投放市场后,我收到的反馈很少,告诉我玩家只看到白框,这意味着纹理由于某种原因不起作用。这些手机是运行 4.0.4 的 LG Optimus Black 和三星 Galaxy S。所以 Android 4.0.4 是为三星 Galaxy S 定制的,因为他们没有发布官方版本。

该怎么办?我所有的图像都是 24 位 PNG 并且都是 2 的幂。

这是我加载它们的方式:

/** @return texture ID
*/
public int loadTexture(int resource)
{
    int[] temp = new int[1];
    gl.glGenTextures(1, temp, 0);

    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),
            resource);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, temp[0]);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

    // recycle the bitmap
    bitmap.recycle();

    return temp[0];
}

这是链接:https ://play.google.com/store/apps/details?id=com.fizzicsgames.trainthemtocrosslite

4

3 回答 3

1

哦,我太傻了。所以问题是由于将纹理放置在drawable文件夹而不是drawable-nodpi中引起的。纹理在 MDPI 设备和支持非 2 纹理的设备(如我的 Galaxy S Plus)上正常工作。即使纹理是 2 的幂,它们也会根据屏幕进行缩放。因此,如果您不想为每个分辨率创建副本,请始终将纹理放在 drawable-nodpi 中。

于 2012-05-17T13:34:29.830 回答
0

你在使用任何着色器吗?

如果是这样,浮点精度可能会导致硬件依赖问题。例如:里面有 1.0 的浮动制服可能会给你 int() 上的 0;好像它有 0.99 而不是 1.0。

如果您正在使用它,请发布您的着色器代码。

于 2012-05-10T10:46:45.683 回答
0

问题是glGenTextures。我的建议是不要使用它,而是实现你自己的跟踪纹理的系统。

如果您调试并检查输入的值glGenTexturestemp[0]您会在某些设备上看到它每次调用它都会给您一个很好的合理的 1、2、3。在其他设备上调试相同的代码,您可能会看到 1000056737、-31895888 等

编辑例如:

public class Texture{

    public static int texturecount = 0;


    public void loadTexture(Context context){


        int[] textures = new int[1];
        textures[0] = Texture.texturecount;
        Texture.texturecount.texturecount++;

        //...and bind it to our array
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);

        // etc

    }
}

不是一个非常优雅的解决方案,也可能不是线程安全的,但它有效

于 2012-05-14T20:40:13.073 回答