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

通过单击和取消单击libgdx java渲染多行

钱经赋
2023-03-14

我试着让玩家点击保持然后拖拽然后放开,这将完成从你点击的地方到你放开的地方画一条线。然而,我似乎不知道如何保持渲染的线条。每次单击拖动并放开时,它都会正确地绘制线,如果您尝试绘制另一条线,它就会消失。这是我为输入侦听器编写的代码,它获取位置

    @Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    if(button == Buttons.LEFT){
        buttonPositions[0].x = screenX;
        buttonPositions[0].y = screenY;
        projector.unproject(buttonPositions[0]);
    }
    return false;
}

@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
    if(button == Buttons.LEFT){
        buttonPositions[1].x = screenX;
        buttonPositions[1].y = screenY;
        projector.unproject(buttonPositions[1]);
        lineDraws.add(buttonPositions);
    }
    return false;
}

按钮位置是一个向量2的数组,大小为2,因此你可以添加你点击的位置和你放开的位置,然后数组列表中的线条绘制存储向量2数组,然后我尝试循环遍历这个列表并这样渲染它

    public void render(float delta){
    if(!tutOver){
        startTutorial();
    }



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

    renderer.begin();
    for(int i = 0; i < listener.getPositionsList().size() - 1; i+=2){
        renderer.line(listener.getPositionsList().get(i)[0], listener.getPositionsList().get(i + 1)[1]);

    }
    renderer.end();

}

我不知道该做什么,而I=2,它将绘制前两个坐标,然后绘制下两个坐标。非常感谢您的帮助!


共有1个答案

段溪叠
2023-03-14

首先使用数组

你的问题似乎在触地和触地方法上。每次更改

    buttonPositions[0].x
    buttonPositions[0].y
    buttonPositions[1].x
    buttonPositions[1].y

所以,即使将其添加到集合中,也会覆盖上一个集合。

另外,我认为你不需要向量数组——它的结构相当复杂,不是吗?相反,只使用向量数组,然后像现在这样逐二迭代。

    //the listener class
    Array<Vector2> lineDraws = new Array<Vector2>();

    ...

    //touchDown class
    lineDraws.add(new Vector2(screenX, screenY));

    projector.unproject( new Vector2(startX, startY) );

    //consider adding some flag here to prevent two pointers touch (when holding finger, touching with another)

    //touchUp
    projector.unproject( new Vector2(screenX, screenY) );
    lineDraws.add(new Vector2(screenX, screenY));

    ...

    //the screen class render method
    for(int i = 0; i < listener.lineDraws.size - 1; i+=2)
    {
        renderer.line(listener.lineDraws.get(i), listener.lineDraws.get(i + 1));

}
 类似资料:
  • 我正在使用ARCore的Sceneform进行一个项目。我基于ARCore提供的HelloSceneform示例开发它。我想做的是通过点击添加一个可渲染对象,然后当我点击屏幕上的特定可渲染对象时删除它。我尝试了以下方法AnchorNode.setOnTapListener,但它不起作用(没有响应): 我还尝试了以下方法,这会导致意外的接近: 是否有任何方法可以实现此功能?

  • 问题内容: 关于按下inputDialoguebox的“取消”按钮,我有一个问题。我之前也曾问过类似的问题,因此我很抱歉重复自己的道歉。 我遇到的主要问题是,无论我按取消如何,代码都将执行,即使不添加任何输入,套接字连接也不会建立。 为什么会发生这种情况,我该如何避免呢? 因此,即使我确实按了取消,也可以通过目前的方式建立clientsocket连接。原因可能是因为我在同一台计算机上将服务器和客户

  • 问题内容: 单击按钮后,我将尝试呈现一个段落。 这是我的代码。 在这里,我试图在单击按钮时呈现“你好朋友”。但是没有用。 问题答案: 这不是正确的方法,因为它是一个事件处理程序,它将不呈现元素,您需要的是“元素的条件呈现”。 有关详细信息,请参阅“文档”。 条件渲染 。 脚步: 1-使用具有初始值的状态变量。 2-点击按钮将值更新为。 3-使用该状态值进行条件渲染。 工作代码:

  • 假设我们有一些s属于同一,当用户点击时,它被选中了。我想添加一个功能,当用户点击已经选中的时,它会被取消选中,即整个将不会选中。我已经搜索了提示使用的方法,method,clearSelection。但问题是,当用户单击已选择的JRadioButton时,它不会生成任何,而该事件是通过单击其他未选择的生成的。

  • 编辑:底部的解决方案 这是一个跳棋游戏。单击一个按钮后,它等待单击第二个按钮与之交换。然而,有时你可能不想移动那个按钮,但一旦你点击了它,就没有回头路了,因为我无法禁用它。 在这里的其他帖子中,我看到人们使用 这只是使它在第一次单击后不可见。 这什么都干不了。 这也没什么用。编辑:所有这些方法都用true和false进行了尝试。 私有无效交换(){ 但你也需要 这样它就重新启用了它,或者其他什么,

  • 我想知道如何选择listview first item select并通过单击按钮自动单击。 使用下面的代码,我可以选择第一行,但无法选择。 这是我的listview点击事件: 非常感谢您的帮助!如果有人想了解更多信息,请务必告诉我,以便我更新我的问题。