首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

texture与sprite的差别

2013-09-09 
texture与sprite的区别Texture :保存在GPU缓冲中的一张纹理。TextureRegion: 定义了一块矩形区域的纹理。主

texture与sprite的区别

Texture :保存在GPU缓冲中的一张纹理。
TextureRegion: 定义了一块矩形区域的纹理。主要作用是从一块纹理中择取需要使用的矩形区域。
Sprite:Holds the geometry, color, and texture information for drawing 2D。这个类是继承于TextureRegion,是对TextureRegion的功能的扩展,相比增加了旋转,动画等效果。
SpriteBatch:A SpriteBatch is used to draw 2D rectangles that reference a texture (region). 主要处理对纹理的绘画,绘画前的优化等。

从源码中可以知道:
Sprite 可以使用 TextureRegion构造,TextureRegion可以使用Texture构造。所以SpriteBatch在底层最终操作的还是Texture。他们的关系就是这些了。

上代码比较他们的区别:
环境:我的模拟器分辨率是240X400,例子中使用到的图片是512X512尺寸的。注意纹理图片必须是2的N次幂大小。

 

texture与sprite的差别texture与sprite的差别

                                            测试图片 大小512x512

 

使用纹理texture绘画:

texture与sprite的差别
 1 private Texture texture;//定义一张纹理 2     private SpriteBatch spriteBatch;//定义一个纹理绘画器 3     private TextureRegion textureRegion;//定义一个纹理区域 4   5     public MogulListener() { 6         7     } 8     @Override 9     public void create() {10         texture =new Texture(Gdx.files.internal("wallpaper.jpg"));11         spriteBatch =new SpriteBatch();12     }13     @Override14     public void render() {15         Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 16         spriteBatch.begin();17         spriteBatch.draw(texture, 0,0);//根据屏幕大小,只能画出从左下角开始大小为240x400的图片。18         spriteBatch.end();19         20     }
texture与sprite的差别

 

由于纹理不能设置可见区域的坐标和大小,所以看到的图片如下,还有一部分没有画出来:

texture与sprite的差别

 

使用纹理区域绘图:可以定义区域在纹理中的相对坐标和大小。下面画出图片的右上角部分。

texture与sprite的差别
 1 @Override 2     public void create() { 3         texture =new Texture(Gdx.files.internal("wallpaper.jpg")); 4         textureRegion=new TextureRegion(texture,272,112,240,400); 5         spriteBatch =new SpriteBatch(); 6     } 7     @Override 8     public void render() { 9         Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 10         spriteBatch.begin();11         spriteBatch.draw(textureRegion, 0,0);12         spriteBatch.end();13         14     }
texture与sprite的差别

效果图:

texture与sprite的差别

使用sprite绘图。由于Sprite继承于TextureRegion,所以Sprite拥有TextureRegion所有属性。Sprite还实现了一些自己特有的属性,比如旋转动画等。

texture与sprite的差别
 1 private Texture texture; 2     private SpriteBatch spriteBatch; 3     private TextureRegion textureRegion; 4     private Sprite sprite;  5     public MogulListener() { 6         7     } 8     @Override 9     public void create() {10         texture =new Texture(Gdx.files.internal("wallpaper.jpg"));11         sprite=new Sprite(texture, 292, 20,220, 380); //画右下角图片12         sprite.setPosition(20, 20); //从屏幕坐标20,20开始绘画13         sprite.setRotation(45); //旋转45度14         spriteBatch =new SpriteBatch();15     }16     @Override17     public void render() {18         Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 19         spriteBatch.begin();20         sprite.draw(spriteBatch);21         spriteBatch.end();22         23     }
texture与sprite的差别

效果图:

texture与sprite的差别

 

 

这里偷懒了,没有将状态栏和应用的label去掉,影响效果显示。

 

1楼u01205507223分钟前
http:my.opera.com/qqqtk13/blog/ww21nhttp:my.opera.com/qqqtk13/blog/ww22nhttp:my.opera.com/qqqtk13/blog/ww23nhttp:my.opera.com/qqqtk13/blog/ww24nhttp:my.opera.com/qqqtk13/blog/ww25nhttp:my.opera.com/qqqtk13/blog/ww26nhttp:my.opera.com/qqqtk13/blog/ww27nhttp:my.opera.com/qqqtk13/blog/ww28nhttp:my.opera.com/qqqtk13/blog/ww29nhttp:my.opera.com/qqqtk13/blog/ww30nhttp:my.opera.com/qqqtk13/blog/ww31nhttp:my.opera.com/qqqtk13/blog/ww32nhttp:my.opera.com/qqqtk13/blog/ww33nhttp:my.opera.com/qqqtk13/blog/ww34nhttp:my.opera.com/qqqtk13/blog/ww35nhttp:my.opera.com/qqqtk13/blog/ww36nhttp:my.opera.com/qqqtk13/blog/ww37nhttp:my.opera.com/qqqtk13/blog/ww38nhttp:my.opera.com/qqqtk13/blog/ww39nhttp:my.opera.com/qqqtk13/blog/ww40nhttp:my.opera.com/qqqtk13/blog/ww41nhttp:my.opera.com/qqqtk13/blog/ww42nhttp:my.opera.com/qqqtk13/blog/ww43nhttp:my.opera.com/qqqtk13/blog/ww44nhttp:my.opera.com/qqqtk13/blog/ww45nhttp:my.opera.com/qqqtk13/blog/ww46nhttp:my.opera.com/qqqtk13/blog/ww47

热点排行