在Android游戏中使用Aync Task

时间:2018-12-20 21:07:55

标签: java android

我正在Android Studio中开发一款Whack-a-mole游戏,我在使用AsyncTask时遇到了困难(我们的老师告诉我们要使用它)。

基本上,AsyncTasks没有做任何事情。

我尝试使用一个asynctask来增加一个int值,并在每次增加新值时都使用新值更改文本视图,但是它对于我想要的工作不起作用。

TextView tv;

ImageView iv1;
ImageView iv2;
ImageView iv3;
ImageView iv4;

boolean salir = false;

int puntuacion = 0;
int vidas = 3;

Hilo hilo;
Hilo hilo2;
Hilo hilo3;
Hilo hilo4;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

     tv = findViewById(R.id.textView);

    iv1 = findViewById(R.id.imageView);
    iv2 = findViewById(R.id.imageView2);
    iv3 = findViewById(R.id.imageView3);
    iv4 = findViewById(R.id.imageView4);

    hilo = new Hilo(iv1);
    hilo2 = new Hilo(iv2);
    hilo3 = new Hilo(iv3);
    hilo4 = new Hilo(iv4);
    hilo.execute();
    hilo2.execute();
    hilo3.execute();
    hilo4.execute();

}

public void updatePuntuacion() {
    tv.setText("Puntuacion: " + puntuacion);
}

public void updateVidas() {

}

private class Hilo extends AsyncTask<Void, Void, Integer> {

    boolean estado = false;
    ImageView img;

    public Hilo (ImageView img) {
        this.img = img;
    }

    @Override
    protected Integer doInBackground(Void... voids) {
        while(!salir){

            img.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if (estado) {
                        puntuacion++;
                        updatePuntuacion();
                    } else {
                        vidas--;
                        updateVidas();
                    }

                }
            });


            if(estado) {
                try {
                    Thread.sleep(Math.round(Math.random()*5000+2000));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                img.setImageResource(R.drawable.topo);
                estado=true;
                publishProgress();
            } else {
                try {
                    Thread.sleep(Math.round(Math.random()*3000+1000));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                img.setImageResource(R.drawable.blank);
                estado=false;
                publishProgress();
            }

            if(puntuacion == 100) {
                salir=true;
            }

            if(vidas == 0) {
                salir = true;
            }
        }
        return puntuacion;
    }
}

我希望imageviews每隔X秒更改一次图像(随机发生),但不会。

我希望你们能为我提供帮助,谢谢!!!

1 个答案:

答案 0 :(得分:0)

您需要了解异步任务的工作方式。 您无法在“ doInBackground”中完成所有工作。

  1. 您需要删除onClickListener表单“ doInBackground”。
  2. 在imageview onClick和
  3. 中启动异步任务
  4. 在“ doInBackground”中完成后台处理后, 在“ onPostExecute”中将图像设置为imageview。

请仔细阅读此https://developer.android.com/reference/android/os/AsyncTask 了解什么是异步任务首先