在构建游戏时遇到问题(相机)

时间:2017-08-31 18:39:30

标签: java android libgdx

我在构建游戏时遇到了一些麻烦。 每次我运行应用程序时,控制台都会将图像呈现在手机的错误网站上。意思是墙壁,球和力应该垂直。但是,它呈现水平(在手机横向上)。请帮忙解决这个问题。 非常感谢。

package com.luca.tuninga;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.*;

public class MyGdxGame extends ApplicationAdapter {


public static float APP_FPS = 60f;
public static int V_WIDTH = 480;
public static int V_HEIGHT = 640;


Box2DDebugRenderer b2dr;
World world;
Body ballBody;

OrthographicCamera camera;

float cameraMaxY;

@Override
public void create() {
    world = new World(new Vector2(0, -9.8f), false);
    b2dr = new Box2DDebugRenderer();


    camera = new OrthographicCamera();
    camera.setToOrtho(false, V_WIDTH, V_HEIGHT);
    cameraMaxY = camera.position.y;


    ballBody = createBall();
    createWalls();
}

private void update() {
    world.step(1f / APP_FPS, 6, 2);

    if (Gdx.input.isTouched()) {
        ballBody.setLinearVelocity(0, MathUtils.clamp(ballBody.getLinearVelocity().y, 0, 3));
        ballBody.applyForceToCenter(new Vector2(0, 650f), false);
    }

    if (ballBody.getPosition().y * 32 > cameraMaxY) {
        camera.translate(0, (ballBody.getPosition().y * 32) - cameraMaxY);
        camera.update();

        cameraMaxY = camera.position.y;
    }
}

@Override
public void render() {
    Gdx.gl.glClearColor(.25f, .25f, .25f, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    update();

    b2dr.render(world, camera.combined.cpy().scl(32f));
}

@Override
public void dispose() {
    super.dispose();
    world.dispose();
}

private Body createBall() {
    Body body;
    BodyDef def = new BodyDef();
    def.type = BodyDef.BodyType.DynamicBody;
    def.fixedRotation = true;
    def.position.set(camera.position.x/ 32 + .5f, camera.position.y/ 32);
    def.gravityScale = 3;
    CircleShape shape = new CircleShape();
    shape.setRadius(.5f);

    body = world.createBody(def);
    body.createFixture(shape, 1.0f);
    return body;

}

private void createWalls() {
    Body body;
    BodyDef def = new BodyDef();
    def.type = BodyDef.BodyType.StaticBody;
    def.fixedRotation = true;

    PolygonShape shape = new PolygonShape();
    shape.setAsBox(1, 200 / 32);
    for(int i = 0; i < 20 ; i++) {
        def.position.set(1.01f, i * (200 / 32));
        body = world.createBody(def);
        body.createFixture(shape, 1.0f);

        def.position.set(V_WIDTH / 32 - 1, i * (200 / 32));
        body = world.createBody(def);
        body.createFixture(shape, 1.0f);
    }
}

}

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解您的问题,但在手机(iOS和Android)上,您需要手动分配方向。在AndroidManifest.xml中查找方向并将其指定为横向。

示例:

<activity
            android:screenOrientation="landscape" 
</activity>

答案 1 :(得分:0)

请记住在调用其他方法后直接调用camera.update();。理想情况下,每帧都更新相机。