Предположим, что у меня есть событие движения, когда я держу ключ, мои пушки стреляют шарами. Все в порядке, но мне нужно создать цикл while() для этого внутри этого события, потому что шары отстают.MotionEvent - action_move (прослушивание action_up) в java
Дело в том, что я не могу избежать этого события. Цикл while бесконечен, и я не могу слушать ACTION_UP. Есть ли способ остановить это на ACTION_UP, находясь в этом цикле?
EDIT: часть кода:
@Override
public void surfaceCreated(SurfaceHolder holder) {
game = new Game(holder, resources);
game.start();
shootingThread = new Thread(new Runnable() {
@Override
public void run(){
while(running) {
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));
}
// }
}
});
shootingThread.start();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
touched_x = event.getX();
touched_y = event.getY();
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
startShootTime = new Date().getTime();
running = true;
shootingThread.run();
Log.i("", "\n\ndown\n\n");
} else if (action == MotionEvent.ACTION_MOVE) {
touched_x = event.getX();
touched_y = event.getY();
} else if (action == MotionEvent.ACTION_UP) {
Log.i("", "\n\nup\n\n");
running = false;
}
return true;
}
Я пробовал это, но когда я реализую новую тему и помещаю это, пока есть лагги (и я не знаю почему). Не могли бы вы сказать мне, как это должно быть сделано? Может быть, я только начинал это неправильно или что-то в этом роде. –
Вы используете какой-то игровой движок или стандартную деятельность? Я могу дать некоторые рекомендации, но если вы испытываете отставание, вы должны прокомментировать свой код и определить, откуда происходят задержки. – BoredAndroidDeveloper
Теперь я создал новую тему, и она должна работать, но я не могу изменить изменчивую переменную «running». Он просто застревает в цикле внутри метода run() (система не видит MotionEvent вниз/вверх, когда im в run()) Возможно, я сделал что-то не так Oo Я отредактировал код в своем первом сообщении , не могли бы вы посмотреть? И да, у меня есть два (теперь три отдельных потока) для рисования игрового цикла и т. Д. –