3

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);
 }
}
4

3 に答える 3

4

SpriteBatch は、独自の射影および変換マトリックスを管理します。そのため、行列を設定する必要があります (可能であれば、begin() を呼び出す前に)。

マトリックスに個別にアクセスする必要がない限り (シェーダーなどで投影とモデル ビュー)、投影マトリックスを投影モデル ビュー マトリックスに設定するだけで十分です。

とにかく、これはあなたのコードで動作するはずです:

oCam.update();
spriteBatch.setProjectionMatrix(oCam.combined);
于 2012-09-26T18:53:04.350 に答える
1

あなたの後に電話してみ oCam.apply(Gdx.gl10);てくださいoCam.update();

update() は計算のみを行いますが、それらを適用したことはありません。

于 2012-09-26T17:12:54.793 に答える
0

idaNakav の回答に関連して、他の誰かがこれに遭遇した場合に備えて、LibGDX のカメラに適用機能が表示されなくなりました! したがって、 update() で十分なはずです。

私の問題は少し異なっていました。遠近法カメラを使用してカメラを特定の位置/lookAtsに配置しようとしていましたが、動作させるには2回操作する必要がありました。

私は電話していました:

camera.lookAt(xyz), camera.position.set(xyz), camera.up.set(xyz)

最初の呼び出しで、カメラが非常に奇妙な変換に更新されました。私はやっていたはずです:

camera.position.set(xyz), camera.lookAt(xyz), camera.up.set(xyz)
于 2015-10-08T08:16:16.627 に答える