当前位置: 首页 > 知识库问答 >
问题:

Libgdx在执行元中处理输入

黄靖
2023-03-14

libgdx.我不想有一个演员在舞台上得到触摸输入。在将stage添加到代码之前使其工作。

public class Box extends Actor {
   private MyGdxGame game;
ShapeRenderer renderer;

   private Vector3 pos;
   private int width, height;
   private Rectangle rect;
   private Vector3 color;

   public Box(MyGdxGame game) {
      super();
      this.game = game;
renderer = new ShapeRenderer();
// arbitrary x/y values
      pos = new Vector3(300, 300, 0);
      width = 300;
      height = 200;
      rect = new Rectangle(pos.x, pos.y, width, height);
      color = new Vector3();
      changeColor();

      addListener(new ClickListener() {
         @Override
         public boolean touchDown(InputEvent event, float x, float y, int button, int pointer) {
            changeColor();
            return false;
         }
      });
   }

   private void changeColor() {
      Random rng = new Random();
      color.x = rng.nextInt(255) / 255f;
      color.y = rng.nextInt(255) / 255f;
      color.z = rng.nextInt(255) / 255f;
   }

   @Override
   public void draw(Batch batch, float parentAlpha) {
      super.draw(batch, parentAlpha);   
renderer.begin(ShapeRenderer.ShapeType.Filled);
      renderer.setColor(color.x, color.y, color.z, 1);
      renderer.rect(pos.x, pos.y, width, height);
      renderer.end();
   }

public void dispose() {
renderer.dispose();
}
}
public class MyGdxGame implements ApplicationListener {
   public OrthographicCamera camera;

   private Stage stage;

   @Override
   public void create() {
      camera = new OrthographicCamera();
      camera.setToOrtho(false, Gdx.graphics.getWidth(),  Gdx.graphics.getHeight());

      Box box = new Box(this);

      stage = new Stage();
      stage.addActor(box);

      Gdx.input.setInputProcessor(stage);
   }

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

      camera.update();

      stage.act();
      stage.draw();
   }

   @Override
   public void dispose() {
      renderer.dispose();
   }

   @Override
   public void resize(int width, int height) {}

   @Override
   public void pause() {}

   @Override
   public void resume() {}
}
FATAL EXCEPTION: GLThread 16934
04-30 05:46:43.623 19181 19270 E   AndroidRuntime                               Process: com.suchuu.box2dsquares, PID: 19181
04-30 05:46:43.623 19181 19270 E   AndroidRuntime                               java.lang.IllegalStateException:
04-30 05:46:43.623 19181 19270 E   AndroidRuntime                               at com.badlogic.gdx.graphics.glutils.ShapeRenderer.begin(ShapeRenderer.java:190)
04-30 05:46:43.623 19181 19270 E   AndroidRuntime                               at com.suchuu.box2dsquares.MyGdxGame.render(MyGdxGame.java:25)
04-30 05:46:43.623 19181 19270 E   AndroidRuntime                               at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:414)
04-30 05:46:43.623 19181 19270 E   AndroidRuntime                               at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1571)
04-30 05:46:43.623 19181 19270 E   AndroidRuntime                               at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1270)

box.java:

public class Box extends Actor {
   private MyGdxGame game;
   ShapeRenderer renderer;
   private Vector3 color;

   public Box(MyGdxGame game) {
      super();
      this.game = game;
      renderer = new ShapeRenderer();

      setPosition(300, 300);
      setBounds(300, 300, 600, 500);

      color = new Vector3();
      changeColor();

    this.setTouchable(Touchable.enabled);

      this.addListener(new ClickListener() {
         @Override
         public boolean touchDown(InputEvent event, float x, float y, int button, int pointer) {
            changeColor();
            event.handle();
            return false;
         }
      });
   }

   private void changeColor() {
    Random rng = new Random();
      color.x = rng.nextInt(255) / 255f;
      color.y = rng.nextInt(255) / 255f;
      color.z = rng.nextInt(255) / 255f;
   }

   @Override
   public void draw(Batch batch, float parentAlpha) {
      super.draw(batch, parentAlpha);

      renderer.begin();
    renderer.set(ShapeRenderer.ShapeType.Filled);
      renderer.setColor(color.x, color.y, color.z, 1);
      renderer.rect(getX(), getY(), getWidth(), getHeight());
      renderer.end();
   }

   public void dispose() {
      renderer.dispose();
   }
}

共有1个答案

薛弘阔
2023-03-14

改变

renderer.begin();
renderer.set(ShapeRenderer.ShapeType.Filled);

renderer.begin(ShapeRenderer.ShapeType.Filled);
 类似资料:
  • 我正在开发一款新游戏,我正在用LibGDX实现屏幕。 我对触摸屏和触摸屏的结合有点迷恋。 我的渲染方法中包含以下内容: 目前我有4个不同的屏幕,当isTouch被触发时,它们都发生了变化,问题是在我触摸第一个屏幕一次后,它从屏幕1变成了4。我试图将输入处理器设置为空,但它仍然从屏幕1跳到4,而无需在每个屏幕上等待。屏幕1上的触摸似乎也会在屏幕2 3和4上自动触发。如何重置输入处理器或在下一个屏幕加

  • 我正在使用libGdx,创建一个简单的平台游戏。我正在使用Tiled创建映射和LibGdx tiledMap呈现器。它的设置与SuperKoalio libgdx示例类似。 我现在的碰撞检测,它只是确定玩家是撞到了它的右边,上面还是下面的一个瓷砖。当它检测到右侧碰撞时,它将玩家状态设置为Standing。对播放机的控制是通过InputHandler完成的。当D键被按下时,它将玩家的状态设置为行走,

  • 我的游戏已经很先进了,但我现在面临一个问题,我无法解决。我有一个迷宫和一个角色在里面。对于迷宫的每一行,我为舞台演员定义了一个组,并将该组中的每一个演员(例如墙)放入该组中。之后,我以一个数组结束,它的大小等于迷宫中的行数,并将每个组放入我的阶段。在此之前,它的工作是完美的,我的墙被绘制,我的角色也是,他的头出现在第一排墙后面,由于层。 但当我的角色换行时,我想改变他的“层”,所以它在舞台上的顺序

  • 我已经创建了一个带有输入的表单,但是该框只处理单行中的文本。我想将其样式设置为输入字段类似于Twitter的输入字段,其中框本身是多行: 当您按enter键时,它也会展开: 这就是我目前拥有的: 我已经设计了按钮和输入的样式,但是没有做任何改变它的形状,所以它是默认的。要实现这一点,我需要调整什么?

  • 问题内容: 我有一个简单的批处理文件。我想 从Jenkins调用/运行/执行该文件 。 Jenkins中是否有相同的插件? 如何从Jenkins执行批处理文件?如果有相同的任何教程或文档。 问题答案: 在Linux上,转到jenkins作业,转到配置,添加构建步骤“ execute shell”,然后键入脚本的名称。请确保您的文件是可执行文件(chmod 777 yourscript.sh),并且

  • 我想从R脚本执行批处理文件。该文件位于类似于“网络\路径\到\批处理\文件”的目录中。bat。 我知道我可以使用R中的system命令来运行DOS命令,但我不能简单地使用system(“start file.bat”)。那么,如何最好地使用R脚本来执行这个批处理文件呢?