Здравствуйте.
Не могу в классе сформулировать обращение к другому объекту класса,
в данном случае сделать проверку на нажатие другой кнопки. Чтобы отследить одновременное нажатие. Для примера накидал код:
Методы обработки из классов кнопок вынесите в класс-менеджер.
В классе-менеджере разместите массив отслеживаемых кнопок.
В логике класса-менеджера реализуется обработка взаимной логики нескольких кнопок (одновременное нажатие, взаимная блокировка…) Классы кнопок обрабатывают только изолированные друг от друга алгоритмы (например, антидребезг, удержание, двойное нажатие…)
Функционал программы общается с кнопками через менеджер клавиатуры, сами кнопки наружу в код не торчат, сами ничем не управляют.
В таком случае вы нарушите принцип ООП, организуете горизонтальные связи. В такой реализации красивых архитектурных советов вам не дадут, любое решение будет корявое (хоть и рабочее) и не особо отличаться по стройности от любых предложенных лично вами ранее.
Лично я идеологически против обращений из кнопки в кнопку. Технически можно. А представьте у вас не 2, а 104 кнопки? Когда придумываете решение, прикиньте, как оно будет масштабироваться на случай увеличения количества элементов. Если легко, значит решение правильное. Если в задаче масштабирование не требуется, значит любое (работающее) решение правильное - не усложняй.
Может быть, можно обратиться ко всем остальным, массив создать? А то я пробовал внутри обращаться(ставить отдельный флаг внутри метода)- он и самого себя тоже считает, насколько я понял.
Каka A, B, C, D;
Manager Mng;
void setup() {
Mng.Add(A);
Mng.Add(B);
Mng.Add(C);
Mng.Add(D);
Mng.Start(); //вызов этого метода обозначает что добавление закончено, можно знакомить объекты друг с другом и начинать работу
}
Ну, за это я Вам уже плюсик выше поставил, но, боюсь, для ТС это непросто. Там же надо либо это Manager делать другом Kaka, либо ещё как эти вопросы решать. Мне кажется, для ТС это пока излишнее плождение сущностей.
Не нужно пытаться нажимать две кнопки одновременно и, соответственно, ловить такой момент. Одна кнопка в любом случае нажимается чуть раньше. Задача - отловить событие нажатия первой кнопки и проверить текущее состояние второй в этот момент. Если вторая нажата - имеем одновременное нажатие двух кнопок. Если же порядок нажатия кнопок (вторая-первая или первая-вторая) не имеет значения, то проверка делается для обеих кнопок, см. пример выше
Когда ты нажимаешь Ctrl+Enter на клаве, ты же не тапаешь на обе эти кнопки одновременно? Правильный алгоритм - нажал Ctrl и, не отпуская его, нажимаешь Enter. Обратная последовательность в некоторых случаях (с некоторыми комбинациями) тоже работоспособна, но правильная последовательность такая.
Про одновременность. Объединяя логику одновременного нажатия и антидребезга получается следующее: полное считывание подтвержденного статуса всех кнопок допускается после истечения таймаутов дребезга всех кнопок. Поэтому, если кнопки нажимались с задержкой друг относительно друга не более таймаута дребезга, то всегда будет зафиксировано одновременное нажатие.
Таймаут нужно подбирать так, чтобы было удобно пользоваться.
Возможно, клавиатура настраиваемая. К примеру, для кнопок допускающих одновременное нажатие в текущем контексте, таймауты увеличиваются. А для индивидуальных кнопок (например меняющих значение +/- параметра) важна быстрая реакция и парная работа не требуется - им таймауты меньше.
Потому что в МК не клава, а кнопки.) Бывает совсем мало кнопок. Например, 2-е на всё про всё.)
Но я сторонник прежде всего удобства. И “интуитивно понятности”)