gpt4 book ai didi

java - 我需要帮助在另一种方法完成后立即启动一种方法,而不是在它完成期间

转载 作者:行者123 更新时间:2023-11-29 03:31:43 25 4
gpt4 key购买 nike

我正在制作一款游戏,有人点击后,一个球会在屏幕上移动,这需要一些时间。我正在尝试在球停止移动后做一个方法。我试过 sleep ,但没有用。我也看了asynctask,没完全看懂。有人可以指出我正确的方向或告诉我如何在我的代码中使用 asynctask,谢谢。我对此很陌生,所以任何事情都会有所帮助。

第一部分是主类,其中包含游戏中的 Action 代码。 afterKick() 方法是我希望在 kick() 方法完成后发生的操作。

    final FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
main.setBackground(this.getResources().getDrawable(R.drawable.field));
newBall = new Ball(this);
main.addView(newBall);
main.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {

float x = event.getX();
float y = event.getY();
System.out.println("x:" + x + " y" + y);

if(kick == false && attempt<10)
{
setHeight(y, newBall);
kick(x,y,newBall,main);
}
afterKick();
// TODO Auto-generated method stub
return false;
}
});

一旦调用 kick() 方法,它就会转到创建球的类。 onDraw 方法不断重复,直到球不再因无效而重新绘制。

@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawBitmap(scaled, left, top, null);
if(topMax>=top)
{
setDone(true);
}
else if(straight == true && top> topMax)
{
kickStraight();
}
else if(righty == true && top>topMax)
{
kickRight();
}
else if(midRight == true && top>topMax)
{
kickMidRight();
}
else if(midLeft == true && top>topMax)
{
kickMidLeft();
}
else if(lefty == true && top>topMax)
{
kickLeft();
}
invalidate();
}

在 invalidate 不再重新启动 onDraw 方法后,我不知道该怎么做。任何帮助都会有用,谢谢!

最佳答案

AsyncTasks 有一个 get方法将强制程序在继续之前等待 AsyncTask 的输出。你可以做的是让你的 AsyncTask 在它完成时返回一个值,并且在你的调用线程中你可以将这个值分配给一个变量。

 AsyncTask task = new AsyncTask().execute(params);
Object output = task.get();

但是,使用get方法会阻塞UI线程。更安全(更好)的替代方法是使用 AsyncTask 的 onPostExecute 方法。这将在 doInBackground 方法完成后调用,并将在主 UI 线程上运行。

关于java - 我需要帮助在另一种方法完成后立即启动一种方法,而不是在它完成期间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com