如何在旋转的等距图块上正常渲染精灵? LIBGDX
How to render Sprites normally on rotated isometric tiles? LIBGDX
我正在使用本教程从普通精灵制作等距地图:
http://www.badlogicgames.com/wordpress/?p=2032
我想在位置 0,0 的地砖上渲染一座房子,但它看起来像这样:
http://gyazo.com/c7d5cd74829150c684cfa7b40c9fdfba
这是我的 create() 和 render():
@Override
public void create () {
batch = new SpriteBatch();
img = new Texture(Gdx.files.internal("grass2d.jpg"));
//House
house = new Sprite(new Texture(Gdx.files.internal("mb_0004.png")));
house.setSize(2,2);
house.setPosition(0,0);
// Camera
cam = new OrthographicCamera(10,10*(Gdx.graphics.getHeight()/(float)Gdx.graphics.getWidth()));
cam.position.set(5,5,10);
cam.direction.set(-1,-1,-1);
cam.near = 1;
cam.far = 100;
//Matrices
//Matrix to rotate floor tiles
matrix.setToRotation(new Vector3(1,0,0), 90);
// Subject to change?
matrix2.setToRotation(new Vector3(0,1,0),45);
// populate Tiles
for(int z = 0; z < 100; z++) {
for(int x = 0; x < 100; x++) {
sprites[x][z] = new Sprite(img);
sprites[x][z].setPosition(x,z);
sprites[x][z].setSize(1, 1);
}
}
Gdx.input.setInputProcessor(this);
}
@Override
public void render () {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
cam.update();
batch.setProjectionMatrix(cam.combined);
batch.setTransformMatrix(matrix);
batch.begin();
for(int z = 0; z < 100; z++) {
for(int x = 0; x < 100; x++) {
sprites[x][z].draw(batch);
}
}
batch.end();
batch.begin();
//batch.setTransformMatrix(matrix2);
house.draw(batch);
batch.end();
我确实尝试创建另一个 Matrix 将其转换回来,但后来我的坐标搞砸了。希望大家帮帮忙。
我能够使用 TiledMap 和自己编写的算法来检测是否点击了某个图块以及点击了哪个图块。我现在可以用鼠标放置我的房子了,非常喜欢这个结果。
如果大家有兴趣,我会花时间写一个小教程
目前情况如下:
Isometric Tiles
我正在使用本教程从普通精灵制作等距地图: http://www.badlogicgames.com/wordpress/?p=2032
我想在位置 0,0 的地砖上渲染一座房子,但它看起来像这样: http://gyazo.com/c7d5cd74829150c684cfa7b40c9fdfba
这是我的 create() 和 render():
@Override
public void create () {
batch = new SpriteBatch();
img = new Texture(Gdx.files.internal("grass2d.jpg"));
//House
house = new Sprite(new Texture(Gdx.files.internal("mb_0004.png")));
house.setSize(2,2);
house.setPosition(0,0);
// Camera
cam = new OrthographicCamera(10,10*(Gdx.graphics.getHeight()/(float)Gdx.graphics.getWidth()));
cam.position.set(5,5,10);
cam.direction.set(-1,-1,-1);
cam.near = 1;
cam.far = 100;
//Matrices
//Matrix to rotate floor tiles
matrix.setToRotation(new Vector3(1,0,0), 90);
// Subject to change?
matrix2.setToRotation(new Vector3(0,1,0),45);
// populate Tiles
for(int z = 0; z < 100; z++) {
for(int x = 0; x < 100; x++) {
sprites[x][z] = new Sprite(img);
sprites[x][z].setPosition(x,z);
sprites[x][z].setSize(1, 1);
}
}
Gdx.input.setInputProcessor(this);
}
@Override
public void render () {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
cam.update();
batch.setProjectionMatrix(cam.combined);
batch.setTransformMatrix(matrix);
batch.begin();
for(int z = 0; z < 100; z++) {
for(int x = 0; x < 100; x++) {
sprites[x][z].draw(batch);
}
}
batch.end();
batch.begin();
//batch.setTransformMatrix(matrix2);
house.draw(batch);
batch.end();
我确实尝试创建另一个 Matrix 将其转换回来,但后来我的坐标搞砸了。希望大家帮帮忙。
我能够使用 TiledMap 和自己编写的算法来检测是否点击了某个图块以及点击了哪个图块。我现在可以用鼠标放置我的房子了,非常喜欢这个结果。
如果大家有兴趣,我会花时间写一个小教程
目前情况如下: Isometric Tiles