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的图片后显示正常,于此我肯定是图片的格式有问题。