我试图让OrthographicCamera
跟随用户控制的精灵。我根本无法让相机正确更新位置。我似乎无法看到我的代码与其他人所做的相比有什么问题。
我还在学习,在这一点上,我认为问题是由一些我现在还不完全理解的简单问题引起的。
感谢任何帮助,谢谢。
这是我的渲染器:
public class WorldRenderer {
private static final float CAMERA_WIDTH = 10;
private static final float CAMERA_HEIGHT = 7;
private World world;
private OrthographicCamera oCam;
private Hero hero;
ShapeRenderer debugRenderer = new ShapeRenderer();
/** TEXTURES **/
private Texture heroTexture;
private Texture tileTexture;
private SpriteBatch spriteBatch;
private int width, height;
private float ppuX; // Pixels per unit on the X axis
private float ppuY; // Pixels per unit on the Y axis
public void setSize (int w, int h) {
this.width = w;
this.height = h;
ppuX = (float)width / CAMERA_WIDTH;
ppuY = (float)height / CAMERA_HEIGHT;
}
public WorldRenderer(World world, boolean debug) {
hero = world.getHero();
this.world = world;
spriteBatch = new SpriteBatch();
oCam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
oCam.update();
loadTextures();
}
private void loadTextures() {
tileTexture = new Texture(Gdx.files.internal("images/tile.png"));
heroTexture = new Texture(Gdx.files.internal("images/hero_01.png"));
}
public void render() {
oCam.update();
spriteBatch.begin();
spriteBatch.disableBlending();
drawTiles();
spriteBatch.enableBlending();
drawHero();
spriteBatch.end();
}
private void drawHero() {
spriteBatch.draw(heroTexture, hero.getPosition().x * ppuX, hero.getPosition().y * ppuY, Hero.SIZE * ppuX, Hero.SIZE * ppuY);
oCam.position.set(hero.getPosition().x, hero.getPosition().y, 0);
}
}
答案 0 :(得分:4)
SpriteBatch管理自己的投影和转换矩阵。因此,您必须设置其矩阵(如果可能,在调用begin()之前)。
除非您需要单独访问矩阵(投影和模型视图,例如着色器),否则将投影矩阵设置为投影模型视图矩阵就足够了。
无论如何,这应该适用于您的代码:
oCam.update();
spriteBatch.setProjectionMatrix(oCam.combined);
答案 1 :(得分:1)
尝试在oCam.apply(Gdx.gl10);
oCam.update();
update()只进行计算,但你从未应用过它们。
答案 2 :(得分:0)
关于idaNakav的回答,我再也看不到LibGDX中相机的应用功能了,万一其他人偶然发现了这个问题!所以我想象的更新()应该足够了。
我的问题有点不同,我试图将相机放在某个位置/使用透视相机进行观察,并且必须采取行动两次才能工作。
我在打电话:
camera.lookAt(xyz), camera.position.set(xyz), camera.up.set(xyz)
第一次调用使相机更新为一个非常奇怪的变换。我应该这样做:
camera.position.set(xyz), camera.lookAt(xyz), camera.up.set(xyz)