java - LibGDX 输入仅运行我的循环一次,并且在单击鼠标时不会连续运行

标签 java android libgdx mouseclick-event

public void update(float delta){
    position.x = getX();
    if(Gdx.input.justTouched()){
        for(;position.x < 864; position.x = position.x + 0.5f){
            setX(getX() + 3f*delta);
        }
    }       
}

上面的代码显示了使 block 移动的循环,就像角色从屏幕的一侧移动到另一侧,并在到达 x 坐标 864 时停止。循环在单独运行时运行良好,但它我一编译游戏就运行。我想要它做的是当鼠标单击屏幕上的任意位置时运行循环。但实际发生的情况是,它只运行一次循环,我必须在循环完成之前多次单击鼠标,并且 block 位于屏幕的另一侧(下图)。有人可以告诉我如何设置它,以便它运行整个循环并通过单击鼠标将 block 从左向右移动。

非常感谢。

图片: 这是 block 开始的地方:/image/n5CDU.png 这就是我希望单击鼠标时的结果:/image/lnZA1.png

最佳答案

您不能在update中使用这样的循环,因为它们会阻塞渲染循环。渲染循环已经提供了循环,因此您只需在每次调用更新时增加它。保留一个 boolean 值来决定是否需要开始运动。像这样的事情:

boolean hasBeenTapped = false;

public void update(float delta){

    if (Gdx.input.justTouched())
        hasBeenTapped = true;

    if (hasBeenTapped && getX() < 864)
        setX(getX() + 3f*delta);

}

如果您想使用scene2d ,那么它有自己的操作系统来为你处理这些东西,可能比这更直观。不过,我个人仅将 scene2d 用于 UI 内容,因为我发现设置游戏代码太耗时/限制性太强。

关于java - LibGDX 输入仅运行我的循环一次,并且在单击鼠标时不会连续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26454880/

相关文章:

java - 消息为 "Unexpected element: CDATA"的 org.apache.xmlbeans.XmlException 是什么意思?

Java - 另存为 RTF 不支持文本对齐?

java - 如何处理libGDX的Box2D ContactListener中的空指针异常?

java - Box2D 形状未渲染

Java 如何避免类型转换

java - Set Of Sets on contain 方法是否检查顺序?

android - 更改相对布局的宽度时滚动条消失

android - 如何忽略 “&feature=xxxxxxxxx”以从YouTube网址获取视频ID

android - 如何让原生 Unix/Linux 守护进程在 Android 上运行?

java - 无论 FPS 如何,Box2D 以相同的速率移动物体