Java 在一段确定的时间间隔后,我如何重复调用一个方法?
我正在使用libgdx和androidstudio。在这里,我试图在确定的时间间隔0.5秒后调用一个方法(用于创建纹理)。但当我运行程序时,它显示“无响应”对话框Java 在一段确定的时间间隔后,我如何重复调用一个方法?,java,android,time,libgdx,Java,Android,Time,Libgdx,我正在使用libgdx和androidstudio。在这里,我试图在确定的时间间隔0.5秒后调用一个方法(用于创建纹理)。但当我运行程序时,它显示“无响应”对话框 private float x=System.currentTimeMillis(); //in update method public void update(float dt) { handleinput(); while(x<=System.currentTimeMillis())
private float x=System.currentTimeMillis();
//in update method
public void update(float dt) {
handleinput();
while(x<=System.currentTimeMillis()){
eggs.create();
//eggs.update(dt);
x+=500;
}
}
private float x=System.currentTimeMillis();
//在更新方法中
公共无效更新(浮动dt){
handleinput();
(x要处理时间,请在每次调用render时使用一个添加增量时间的变量,如果该变量优于1.0f,则表示已过一秒钟,则代码如下所示:
private float timeSeconds = 0f;
private float period = 1f;
public void render() {
//Execute handleEvent each 1 second
timeSeconds +=Gdx.graphics.getDeltaTime();
if(timeSeconds > period){
timeSeconds-=period;
handleEvent();
}
[...]
}
public void handleEvent() {
[...]
}
为了保持组织有序,我个人在我的主游戏类上有一个数组,它保存我所有的定时事件,并处理渲染周期中的所有内容。你的代码实际上是一场与时钟竞争的比赛
循环可能永远不会结束,因为eggs.create()
比循环结束时x
的增量500要花更多的时间
使用float
而不是long
也不是一种好的做法
编辑:
要进行适当的调度,请使用与Florian S.在回答中建议的类似的最著名的Java方法。您的问题是不应该在此处使用System.currentTimeMillis()
:
currentTimeMillis
返回:当前时间与UTC 1970年1月1日午夜之间的差值,以毫秒为单位
公共无效更新(float dt){
如果(dt<500){
int x=10;
//设x为要递增的某个值
更新(dt+x);
}
...
}
此版本不能保证半秒钟,但可以让您更好地了解如何解决此问题。当您希望循环运行代码时,应使用ExecutorService.scheduleAtFixedRate()
或Android等效工具。您所做的将在egs.create()时阻止线程需要500毫秒以上。您的卵需要多长时间。create()方法需要花费?此方法甚至不做您希望它做的事情。首先,请使用long
而不是float
进行x
Thank you@quinz它工作了!非常感谢!很酷,这很有帮助。请注意,使用适当的时间表将是一种编程实践。
public void update(float dt) {
if(dt < 500) {
int x = 10;
// let x be some value to increment
update(dt + x);
}
...
}