我正在尝试从Texture Atlas创建的Sprite或Atlas Region获取纹理。
atlas=new TextureAtlas(Gdx.files.internal("Test.pack"));
region=atlas.findRegion("green");
或
Sprite s = atlas.createSprite("red");
texture = s.getTexture();
我在findRegion和createSprite方法中给出了图像的名称,它总是选择其他图像对象。我想获得图像的纹理,以便可以渲染该纹理的一部分。
这是Packer图片: http://i61.tinypic.com/neupo2.png
即使我尝试获得绿色区域或红色,它也总是返回蓝色。任何帮助将不胜感激。
答案 0 :(得分:4)
当你执行“textureAtlas.findRegion(”objectTexture“)。getTexture();” (来自James Skemp的回答)你从地图集中得到了整个纹理,而不仅仅是来自“objectTexture”的区域。
不要费心创建纹理来创建Sprite,你可以使用TextureRegion来创建Sprite。像这样:
atlas=new TextureAtlas(Gdx.files.internal("Test.pack"));
regionGreen=atlas.findRegion("green");
Sprite s = new Sprite(regionGreen);
答案 1 :(得分:0)
我的用例略有不同,但我遇到了同样的问题。
我有一个扩展Actor
的对象,我希望使用地图册中的某个区域进行绘制。
public class MyObject extends Actor {
private Texture texture;
public MyObject() {
TextureAtlas textureAtlas = new TextureAtlas(Gdx.files.internal("xxx.atlas"));
texture = textureAtlas.findRegion("objectTexture").getTexture();
Gdx.app.log(TAG, "Texture width: " + texture.getWidth());
Gdx.app.log(TAG, "Texture height: " + texture.getHeight());
setBounds(getX(), getY(), Constants.STANDARD_TILE_WIDTH, Constants.STANDARD_TILE_HEIGHT);
// ...
}
@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(texture,
worldPosition.x * Constants.STANDARD_TILE_WIDTH, worldPosition.y * Constants.STANDARD_TILE_WIDTH,
texture.getWidth(), texture.getHeight());
}
}
而不仅仅是我期待的区域,而是收到了整个地图集,因此我记录的纹理宽度和高度为1024 x 128。
不幸的是,仍然不确定为什么getTexture()
返回太多,但切换到batchDraw(TextureRegion, ...)
至少让我处于更好的位置。
public class MyObject extends Actor {
private TextureRegion texture;
public MyObject() {
TextureAtlas textureAtlas = new TextureAtlas(Gdx.files.internal("xxx.atlas"));
texture = textureAtlas.findRegion("objectTexture");
setBounds(getX(), getY(), Constants.STANDARD_TILE_WIDTH, Constants.STANDARD_TILE_HEIGHT);
// ...
}
@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(texture, getX(), getY());
}
}
根据我对精灵的看法,提问者看到了一个蓝色正方形,原因与我相同;整个图像被getTexture()
加载,因为它从左下角开始,你总是看到一个蓝色方块。
使用Sprite(TextureRegion)
构造函数可能也解决了他们的问题。
答案 2 :(得分:0)
对我来说,你的问题是Test.pack文件,而不是纹理。
它适用于我用GDX Texture Packer打包的那个:
Test.png
format: RGBA8888
filter: Nearest,Nearest
repeat: none
blue
rotate: false
xy: 1, 1
size: 51, 51
orig: 51, 51
offset: 0, 0
index: -1
green
rotate: false
xy: 54, 1
size: 51, 51
orig: 51, 51
offset: 0, 0
index: -1
red
rotate: false
xy: 107, 1
size: 51, 51
orig: 51, 51
offset: 0, 0
index: -1
yellow
rotate: false
xy: 160, 1
size: 51, 51
orig: 51, 51
offset: 0, 0
index: -1
答案 3 :(得分:-1)
使用索引来获取它。从包文件或.atlas文件中获取索引。
atlas=new TextureAtlas(Gdx.files.internal("Test.pack"));
region=atlas.findRegion("green",index);
或
Sprite s = atlas.createSprite("red",index);
texture = s.getTexture();