我的游戏设置了这个屏幕,我看到了我创建的演员。
然而,任何人都可以告诉我为什么相机似乎没有移动?当我按下左键时,我希望演员向右移动。
Gdx.input.isKeyPressed(Input.Keys.LEFT)确实解析为true,并且会调用translate函数。
public class MainScreen implements Screen {
private Stage mainStage;
private Camera orthCamera;
@Override
public void show() {
orthCamera = new OrthographicCamera();
mainStage = new Stage(new ScreenViewport());
mainStage.getViewport().setCamera(orthCamera);
MyGameActorObject s = new MyGameActorObject();
s.setPosition(100, 100);
mainStage.addActor(s);
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0,0,0,1); //sets clear
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
processKeyboardInput();
mainStage.act(delta);
mainStage.draw();
}
private void processKeyboardInput()
{
if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) {
orthCamera.translate(-30, 0, 0);
orthCamera.update();
}
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
mainStage.dispose();
}
}
我试图通过键盘输入来解决2d游戏世界的问题。
这是自定义Actor对象的内容:
public class MyGameActorObject extends Actor
{
@Override
public void act(float delta) {
super.act(delta);
}
@Override
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
ShapeRenderer r = new ShapeRenderer();
r.begin(ShapeRenderer.ShapeType.Filled);
r.setColor(Color.RED);
r.circle(this.getX() - 50.0f, this.getY() - 50.0f, 100.0f);
r.end();
}
}
答案 0 :(得分:2)
我相信我必须添加类似
的内容r.setProjectionMatrix(batch.getProjectionMatrix());
在我的自定义actor对象中。所以我对象的绘制函数现在就是。
@Override
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
ShapeRenderer r = new ShapeRenderer();
r.setProjectionMatrix(batch.getProjectionMatrix());
r.begin(ShapeRenderer.ShapeType.Filled);
r.setColor(Color.RED);
r.circle(this.getX() - 50.0f, this.getY() - 50.0f, 100.0f);
r.end();
}
答案 1 :(得分:0)
我认为您的问题是您没有设置InputProcessor
。
Gdx.input.setInputProcessor(...)
是您正在寻找的方法。将其放在show()
方法中,并将其传递给InputProcessor
引用。 InputProcessor是一个接口,它遍历所有不同类型的基于点击的输入,并允许您确定其中发生的事情。例如:
@Override
public boolean keyDown(int keycode)
{
switch(keycode)
{
case Keys.D:
screen.universe.entity_handler.player.moving_right = true;
break;
case Keys.A:
screen.universe.entity_handler.player.moving_left = true;
break;
case Keys.SPACE:
screen.universe.entity_handler.player.jumping = true;
break;
...
}
...
}
上面的代码是InputProcessor
的一部分 - 我正在制作的游戏实现类。当按下输入问题时(在这种情况下为keyDown
),游戏会查看您的输入按钮(keycode
)并通过switch语句发送它。
请注意,您必须为要使用的所有输入事件返回true
。这就是此方法的boolean
返回值。