Retraso entre balas java – hilo nuevo

Digamos que tengo un cañón en la parte inferior de la pantalla que dispara bolas en la dirección de clic. También tengo algunos algorithms de colisiones y aquí viene el problema. Estoy tratando de implementar un método OnHold que se dispara continuamente y funciona, pero creo que tengo que hacer disparos en otro hilo. Lo he implementado de dos maneras: 1. Estaba verificando la demora y, si sucedía, disparaba 2. Estaba revisando la position anterior de la bola y, cuando flotaba, disparaba

Aquí viene el problema de que cuando sostengo el button durante un time, por ejemplo. 5 bolas están bien (están cerca una de la otra – no colisionan) y luego viene una bola que es tarde Oo

No sé cómo implementar un nuevo hilo dentro de estos MotionEvents. Si hay alguien que pueda señalarme (si debo include hilos o algo así) una solución, le agradecería 🙂

@Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub touched_x = event.getX(); touched_y = event.getY(); int i = 100; int action = event.getAction(); if (action == MotionEvent.ACTION_DOWN) { startShootTime = new Date().getTime(); running = true; } else if (action == MotionEvent.ACTION_MOVE ) { shootTime = new Date().getTime(); // movement: cancel the touch press running = true; touched_x = event.getX(); touched_y = event.getY(); // && game.gameLoop.current_time - shootTime > 400 && // game.gameLoop.current_time - startShootTime > 100 // while(actionUpflag) { int size = game.gameLoop.balls.size(); if(size == 0){ game.gameLoop.balls.add(new Ball(metrics.widthPixels, metrics.heightPixels, touched_x, touched_y, game.gameLoop.ball_bmp_width, metrics.heightPixels-game.gameLoop.ball_bmp_width/2)); }else if(size > 0 && game.gameLoop.balls.get(size-1).image_center_y < metrics.heightPixels - game.gameLoop.ball_bmp_width-50) game.gameLoop.balls.add(new Ball(metrics.widthPixels, metrics.heightPixels, touched_x, touched_y, game.gameLoop.ball_bmp_width, metrics.heightPixels-game.gameLoop.ball_bmp_width/2)); invalidate(); // request draw } else if (action == MotionEvent.ACTION_UP) { running = false; } return true; } 

Parece que tienes algún tipo de bucle de juego funcionando siempre? ¿Entonces el juego tiene un object de cañón? Si este es el caso, puede usar el evento táctil para informar la actualización del cañón.

Disculpe mi pseudo código …

en el caso

 public boolean onTouchEvent(MotionEvent event) { touched_x = event.getX(); touched_y = event.getY(); game.gameLoop.cannon.fireAtTarget(x,y); } 

la class de cañón

  void cannon::fireAtTarget( x,y ) { firing = true; targetx = x; targety = y; } 

la actualización del cañón

 void cannon::update( timeNow ) { if( firing && (timeNow-lastTimeFinetworking > 0.5) ) { // fire at targetx, targety. lastTimeFinetworking = timeNow; } } 

No olvide deshabilitar el disparo en el evento de retoque