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

游戏对象上的Libgdx TouchListner(手机屏幕)

王扬
2023-03-14

我在 Libgdx 游戏上的触摸接收器有问题。

在我的玩家主页上,我有这个:

    private OrthographicCamera camera;
    private Vector3 input;

    private Array<Objects> objects;
    private SpriteBatch batch;
    
    //In Constructor
    camera = new OrthographicCamera();
        camera.setToOrtho(false, Configuration.screenWidth, Configuration.screenHeight);

    batch = new SpriteBatch();
    batch.setProjectionMatrix(camera.combined);
    objects = myGame.Objects();
    input = new Vector3(0, 0, 0);
    
    //My Renderer
    public void render(float runtime){
        Gdx.app.log("GameRenderer: ", "Render()");

        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        input.x = Gdx.input.getX();
        input.y = Gdx.input.getY();
        camera.unproject(input);
        batch.begin();

        for (Objects object:objects) {
                                object.getFont().draw(batch,object.getGlyphLayout(),object.getX(),object.getY());
            object.getRec().set(object.getX(),object.getY(),object.getGlyphLayout().width,object.getGlyphLayout().height);
            if(Gdx.input.isTouched()){
                Gdx.app.log("Clicked", "Touched");
                if(object.getRec().contains(input.x, input.y)) {
                        Gdx.app.log("Clicked", "Great");
                    }
                    else {
                        Gdx.app.log("Clicked", "Noooooooooooo");
                    }
                }
            }
        }
        batch.end();
    }

当我运行我的游戏时,除了触摸监听器有时工作正常,但是在触摸几秒钟后。

Gdx.app.log(“已点击”、“已触摸”);通过触摸发射。

但是Gdx.app.log("点击了","很棒");或者Gdx.app.log("Clicked "," nooooooooooo ");我必须执行长按,直到触摸被触发。

谢谢

我添加了一个ShapeRenderer来查看我的对象到底是什么样子的:

shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
        for(Objects object:objects) {
            shapeRenderer.setColor(255 / 255.0f, 0 / 255.0f, 0 / 255.0f, 1);
            shapeRenderer.rect(object.getRec().x, object.getRec().y, object.getRec().width, object.getRec().height);

            shapeRenderer.setColor(0 / 255.0f, 0 / 255.0f, 255 / 255.0f, 1);
            shapeRenderer.rect(object.getX(), object.getY(), object.getGlyphLayout().width, object.getGlyphLayout().height);
        }
        shapeRenderer.end();

于是我有了这个结果:

黑色矩形是对象,蓝色矩形是对象矩形的ShapeRenderer之上的对象的ShapeRenderer。

现在,当我单击对象时,它不会触发单击,但当我单击ShapeRenderer时,它会触发单击。

共有2个答案

蔺弘
2023-03-14

最后,我解决了这个问题,以防万一有人遇到了同样的问题:

object.getRec().set(object.getX(),object.getY(),object.getGlyphLayout().width,object.getGlyphLayout().height);
田权
2023-03-14

检查此解决方案:

@Override
public void create() {
    // Codes
    Gdx.input.setInputProcessor(new InputAdapter () {
        @Override
        public boolean touchDown(int screenX, int screenY, int pointer, int button) {
            // Insert your code
            return true;
        }
    }
    );
    //Codes
}

将Gdx.input.isTouched()放入循环中不是一个好主意。

 类似资料:
  • 您好,我正在中制作一个游戏,我想知道如何以及最好的方式是在屏幕上添加游戏。以下是玩家健康状况小于或等于0的代码: 我不确定该怎么做,因为我试图使用另一个py呼叫游戏,但玩家死亡的时间被重置为0并返回,所以玩家死亡的地方可能发生任何事情吗?

  • 游戏对象的内容: 数据库原则上在游戏过程中是不会被写入的,而针对地图上人物的走动等等情况,发生变化的是游戏对象。 在Scene_Title脚本中,会生成各种游戏对象,比如command_new_game的方法就是其中的一个,这个方法是在选择了标题画面中的[新的游戏]的时候被运行的。 # 生成各种游戏对象 $game_temp = Game_Temp.new $game_system = Game_

  • GameObjects are containers for all other Components. All objects in your game are inherently GameObjects. 游戏对象是所有其他组件的容器。在你的游戏中的所有物体都是游戏对象。 An empty GameObject 一个空的游戏对象 Creating GameObjects 创建游戏对象 Gam

  • GameObjects are the most important objects in Unity. It is very important to understand what a GameObject is, and how it can be used. This page will explain all that for you. 游戏对象是Unity最重要的对象,这对于了解什么是

  • 这是一个运行在 gPhone 手机的简易空战游戏,如下图所示:

  • 我目前正在编写一个游戏,你必须避免小行星。我不得不处理一些混乱的坐标,我不得不猜测精灵的坐标。我现在有了描述我的世界的任意单位。不幸的是,我的游戏屏幕不能完全工作。当我想渲染我的小行星时,游戏屏幕会显示一个黑屏。 上面显示的代码工作正常,并向我展示了以下内容: 当我在GameScreen类中添加小行星的渲染方法时,GameScreen只是黑色的: 小行星等级: 小行星等级: