Libgdx,何时使用camera.position.set?

时间:2015-05-03 14:01:55

标签: libgdx

我真的很困惑两个与视口和orthagraphic相关的例子。虽然我知道Viewport是我们设置在屏幕和相机项目上查看的尺寸的大小。我正在学习libgdx,无法通过正交相机和视口示例完成这些让我完全糊涂的问题。代码在两个示例中运行良好,并在屏幕上显示正确的结果。

这是一个使用 camera.position.set 来定位相机的示例。

public class AnimatedSpriteSample extends GdxSample {
private static final float WORLD_TO_SCREEN = 1.0f / 100.0f;
private static final float SCENE_WIDTH = 12.80f;
private static final float SCENE_HEIGHT = 7.20f;
private static final float FRAME_DURATION = 1.0f / 30.0f;

private OrthographicCamera camera;
private Viewport viewport;
private SpriteBatch batch;
private TextureAtlas cavemanAtlas;
private TextureAtlas dinosaurAtlas;
private Texture background;

private Animation dinosaurWalk;
private Animation cavemanWalk;
private float animationTime;

@Override
public void create() {
    camera = new OrthographicCamera();
    viewport = new FitViewport(SCENE_WIDTH, SCENE_HEIGHT, camera);

    batch = new SpriteBatch();
    animationTime = 0.0f;

... ... ..

camera.position.set(SCENE_WIDTH * 0.5f, SCENE_HEIGHT * 0.5f, 0.0f);

这是另一个不使用 camera.position.set 的例子,结果仍然相同。

@Override
public void create() {      
    camera = new OrthographicCamera();
    viewport = new FitViewport(SCENE_WIDTH, SCENE_HEIGHT, camera);
    batch = new SpriteBatch();
    oldColor = new Color();

    cavemanTexture = new Texture(Gdx.files.internal("data/caveman.png"));
    cavemanTexture.setFilter(TextureFilter.Nearest, TextureFilter.Nearest);


}

@Override
public void dispose() {
    batch.dispose();
    cavemanTexture.dispose();
}

@Override
public void render() {


    Gdx.gl.glClearColor(BACKGROUND_COLOR.r,
                        BACKGROUND_COLOR.g,
                        BACKGROUND_COLOR.b,
                        BACKGROUND_COLOR.a);

    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.setProjectionMatrix(camera.combined);

    batch.begin();

    int width = cavemanTexture.getWidth();
    int height = cavemanTexture.getHeight();
    float originX = width * 0.5f;
    float originY = height * 0.5f;


                    // flipX, flipY

    // Render caveman centered on the screen
    batch.draw(cavemanTexture,                      // Texture itselft
               -originX, -originY,                  // pass in the world space coordinates where we to draw, Considering the camera is centered at (0,0). by default we need to position
                                                    // out cavement at -originX, -originY.
               originX, originY,                    // coordinates in pixels of our texture that we consider to be the origin starting from the bottom-left corner.
                                                    // in our case, we want the origin to be the center of the texture. then we pass the dimensions of the texture and the scale
                                                    // and the scale along both axes (x and Y).
               width, height,                       // width, height
               WORLD_TO_SCREEN, WORLD_TO_SCREEN,    // scaleX, scaleY
               0.0f,                                // rotation
               0, 0,                                // srcX, srcY
               width, height,                       // srcWidth, srcHeight
               false, false);                       // flipX, flipY

让我感到困惑的是,为什么不在第二个例子中使用camera.position.set来调整相机的视图,为什么在第一个例子中使用它是很重要的。

我真的希望这个问题是合法的,也是有道理的。我在这里搜索了论坛,找不到任何线索。希望有人能指导正确的方向。

非常感谢。

0 个答案:

没有答案