LibGdx学习笔记(一)

1.Sprite的绘制是以屏幕左下角(0,0)为坐标系原点,分别向上和向右为正向。Sprite的绘制的坐标是以自身图片的左下角(0,0)开始计算的。不同于J2ME中以自身左上角为坐标原点。

sprite.setPosition(0, 0);

2.当通过SpriteBatch绘制时,Texture绘制上去时,坐标跟Sprite的坐标一样,都是以左下角(0,0)开始计算。

spriteBatch.draw(texture, 0, 0);

3.当在Texture上绘制图形,即像素处理时,坐标又有所不同。是以所在的Texture的左上角为原点计算的。

//构建Pixmap(在Android环境使用internal加载模式时,文件必须放置于assets文件夹下)
pixmap = new Pixmap(Gdx.files.internal("hero-1.png"));
//绘制一个蓝方块到Ball图像之上
pixmap.setColor(Color.BLUE.r, Color.BLUE.g, Color.BLUE.b, Color.BLUE.a);
pixmap.drawRectangle(15, 15, 40, 40);
//以指定Pixmap构建Texture
texture = new Texture(pixmap);
//注入Texture后的pixmap已经没用,可以注销
pixmap.dispose();


PS: gdx对于图片的格式还是很严格的,不要随意修改图片的后缀名。我之前随意使用了一张图片做例子显示,缺一直报错:

03-12 05:29:29.886: E/AndroidRuntime(888): com.badlogic.gdx.utils.GdxRuntimeException: texture width and height must be powers of two

起初一直怀疑是少赋予了width和height两个值。但对于demo中后发现没有赋予这两值也是成功的。查看源码后:

        private void uploadImageData(Pixmap pixmap) {                                   
                this.width = pixmap.getWidth();
                this.height = pixmap.getHeight();
                if(!MathUtils.isPowerOfTwo(width) || !MathUtils.isPowerOfTwo(height))
                        throw new GdxRuntimeException("texture width and height must be powers of two");
觉得应该是读取图片后自动赋予的。那么就开始怀疑是图片的问题。当我替换了demo的图片后显示正常,于此我肯定是图片的格式有问题。
再次补充下问题,此问题还可能是你图片没有按照libgdx的要求,图片本身需要是2的N次幂才行。

你可能感兴趣的:(android,图形,j2me)