libGDX:如何让世界移动
问题描述:
我是libgdx的新手,在简单的2D游戏上工作,我希望我的box2d世界(或背景)随着输入触摸移动(当我按下按钮时向上移动)但我不知道如何移动世界并将我的球员放在中心位置。我想知道:libGDX:如何让世界移动
- 如何通过输入控件移动我的世界。
- 将我的播放器置于*。
而且它看起来像我的玩家每当我玩那个游戏,而不是世界时都在移动。 如果你只能提供你的答案的例子。
所以,这里是我的代码
public void show() {
world = new World(new Vector2(0, 25), true);
renderer = new Box2DDebugRenderer();
cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
/* cam.position.set(Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2, 0);
cam.update();*/
shapeRenderer = new ShapeRenderer();
batch = new SpriteBatch();
texture = new Texture("img/imgs.png");
sprite = new Sprite(texture);
sprite.setSize(10, 10);
sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);
sprite.setPosition(Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2);
//sprite.setBounds(200, 200, 64, 64);
//sprite.setPosition(Gdx.graphics.getWidth()/2 -sprite.getWidth()/2, Gdx.graphics.getHeight()/2-sprite.getHeight()/2);
/* //Body definition
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set(0, Gdx.graphics.getHeight()/2 - 250);
box = world.createBody(bodyDef);
//Polygon Shape
PolygonShape shape = new PolygonShape();
shape.setAsBox(10, 20);
//fixture definition
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixtureDef.density = 5f;
fixtureDef.friction = .5f;
box.createFixture(fixtureDef);
box.setUserData(sprite);
shape.dispose();
*/ }
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
world.step(1/60f, 6, 2);
cam.translate(0, 12);
cam.update();
batch.setProjectionMatrix(cam.combined);
if(Gdx.input.isKeyPressed(Input.Keys.A))
spriteY += Gdx.graphics.getDeltaTime() * spriteSpeed;
if(Gdx.input.isKeyPressed(Input.Keys.D))
spriteY += Gdx.graphics.getDeltaTime() * sprite1Speed;
batch.begin();
batch.draw(sprite, spriteX, spriteY);
batch.end();
shapeRenderer.setColor(Color.RED);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.rect(0, 200, 50, 50);
shapeRenderer.translate(1, 0, 0);
shapeRenderer.end();
}
@Override
public void resize(int width, int height) {
cam.viewportWidth = width;
cam.viewportHeight = height;
cam.update();
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
dispose();
}
@Override
public void dispose() {
//world.dispose();
shapeRenderer.dispose();
batch.dispose();
}
}
对不起,乱七八糟(我是新手)的代码,我想,我的世界输入控件向上移动,我的精灵只是放置在中心。 预先感谢您。
答
你的问题听起来像你想创造一个平台或有点。
我要让你知道,最好的方式来建立你创建(2D)成熟的游戏时,在逻辑上是你的性格应该始终保持它的位置相同,背景和其他固体物体应移动朝玩家(基于输入控件或自动),让玩家看起来像是自然而然地移动,背景物体会以他的方式出现。
我的答案很一般,因为你的问题相当一般。如果您需要代码,您必须向我们提供代码,以便我们知道您卡在哪里。祝你好运:)
将玩家置于中心是一个抽象问题,因为它取决于你绘制对象/纹理的方式。一个简单的谷歌或YouTube的搜索不会伤害,因为你可以很容易地找到很多有用的初学者教程。 –
你为什么要那样做?您必须移动世界上的所有对象而不是一个对象。除了玩家本身之外,没有任何静态的物理体。我能想到的唯一情况就是在一个无限的,渐进的阶段,在这个阶段,一次只能存在一条条的世界,而当玩家远离原点时,你不想开始失去精确性。 – Tenfour04
@ Tenfour04是的,这是关于无限的滚动,但不只是。你谈论的物体只能是2-3个物体,它们总是在视觉区域重新生成,让人感觉它是一个新的障碍物,但它只是你在几秒前通过的物体。让角色完全不改变他的相对位置,就排除了许多条件和事实,您应该检查以便进行背景滚动/重复。 –