Я пытаюсь реализовать что-то вроде Simon Says для Android. Это код, который у меня есть:
for(int i = 1; i <= sequence.size(); i++){
handler.postDelayed(new Runnable(){
public void run(){
if (sequence.peek() == 1){
green.setPressed(true);
handler.postDelayed(new Runnable(){
public void run(){
green.setPressed(false);
}
}, 1000);
}
else if (sequence.peek() == 2){
red.setPressed(true);
handler.postDelayed(new Runnable(){
public void run(){
red.setPressed(false);
}
}, 1000);
}
else if (sequence.peek() == 3){
yellow.setPressed(true);
handler.postDelayed(new Runnable(){
public void run(){
yellow.setPressed(false);
}
}, 1000);
}
else if (sequence.peek() == 3){
blue.setPressed(true);
handler.postDelayed(new Runnable(){
public void run(){
blue.setPressed(false);
}
}, 1000);
}
int myNum = sequence.peek();
sequence.poll();
sequence.add(myNum);
}
}, 1000);
}
}
В принципе, у меня есть очередь (последовательность), которая удерживает шаблон для мигания кнопок. (setPressed (true) - это другой цвет, чем setPressed (false)). В первый раз, когда он вызывается, есть только одна кнопка, которая должна менять цвета, чтобы она работала нормально. Во второй раз, когда он называется, 2 цвета кнопок должны измениться. Мой код сразу же загорится одновременно. Как сделать так, чтобы он сначала мигал одним цветом кнопки, закончил это, а затем мигал цвет второй кнопки? Я пробовал миллион разных вещей, и это все еще самое близкое, что я получил.
Мое предположение было бы, не проверив никакого кода, что это из-за вашего цикла for. В принципе, он проходит через все последовательности и отправляет runnable обработчику с задержкой в 1000 миллисекунд.
Это означает: я равно 0: последовательность 1 начинается через 1000 миллисекунд; я равно 1: последовательность 1 начинается в 1000 миллисекунд; я 2....
Поскольку это в обработчике, это не влияет на время выполнения цикла for, что означает, что все итерации передаются непосредственно друг за другом, что приводит к тому, что каждая runnable выполняется "почти" в одно и то же время.
Просто попробуйте установить задержку (i + 1) * 1000, чтобы каждая "кнопка" была активирована (на секунду), когда это "его время".