Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 437

Работа с if: Одно нажатие включает, второе нажатие выключает код...

18.09.2018, 21:02. Показов 3221. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, продемонстрируйте пожалуйста дурака как правильно работать с if
1. Нужно На кнопку VK_NUMPAD1 включить и отключить данный код "Одно нажатие включает второе нажатие выключает код"
C#
1
2
3
4
5
6
7
8
9
             if (res1 != 0)
            {
                // Нажимает клавиши W + Shift
                const byte VK_W = 0x57;
                const byte VK_SHIFT = 0x10;
                keybd_event(VK_W, 0, 0, UIntPtr.Zero);
                keybd_event(VK_SHIFT, 0, 0, UIntPtr.Zero);
                // 
            }
C#
1
2
3
4
5
6
7
8
9
10
short res1 = GetAsyncKeyState(VK_NUMPAD1); // при нажитии на нум паде на кнопку 1 начинает срабатывать код в if = бег
            if (res1 != 0)
            {
                // Нажимает клавиши W + Shift
                const byte VK_W = 0x57;
                const byte VK_SHIFT = 0x10;
                keybd_event(VK_W, 0, 0, UIntPtr.Zero);
                keybd_event(VK_SHIFT, 0, 0, UIntPtr.Zero);
                // 
            }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2018, 21:02
Ответы с готовыми решениями:

Второе нажатие на кнопку
Надо так чтобы когда нажал первый раз происходило действие,второй раз второе действие и т.д.

Console.ReadKey срабатывает на второе нажатие
Здравствуйте. Подскажите, пожалуйста, что я делаю не так ? Хочу чтобы программа считывала каждый символ и выводила его на экран, а при...

Истечение таймера или нажатие кнопки - одно действие
Добрый вечер! Такая ситуация, есть Button1 и Timer1 по нажатию кнопки должо выполняться: void Button1_Click(object sender, EventArgs...

33
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
21.09.2018, 09:05
Студворк — интернет-сервис помощи студентам
pafka1997, использовать метод вызываемый вашими клавишами, и обратите внимание на пост
Цитата Сообщение от Usaga Посмотреть сообщение
pafka1997, а где тут связь с клавишей VK_NUMPAD1? В первом посте о ней же речь шла?
И при нажатии какой-то клавиши не только меняется значение флага, но и ивенты клавиатурные оптарвляются, но только при установленном флаге. Это нормально?
Я считаю что вам нужно навешивать на контрол событие OnKeyPress (либо поискать как оно правильно для вашего контрола), после чего вычислять что нажата нужная вам кнопка и по ней отрабатывать нужное событие, без послания евентов (keybd_event), а путем выполнения метода по флагу. Что-то на подобие
C#
1
2
3
4
5
6
7
8
9
10
11
overide void OnKeyPress(object sender, EventArgs e)
{
  if(e==KeyCode.Keypad1)
  {
    fly=!fly;
     if(fly)
    {
      Fly();
    }
  }
}
Добавлено через 3 минуты
сразу обратите внимание
e==KeyCode.Keypad1 не истина, это только мой домысел, и что-то мне подсказывает что там по другому, а вот как там, это надо соображать по месту в зависимости от вашего проекта, если это WinForm - поискать что там в EventArgs e существует, если это Xamarin - то смотреть вообще как реализуется OnKeyPress Почему я так вам отвечаю? Просто потому что пишу весь код непосредственно здесь на сайте используя свой опыт и память, а они не идеальны.

Добавлено через 10 минут
Пардон, совсем забылся, код правильный все-таки будет так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
overide void OnKeyPress(object sender, EventArgs e)
{
  if(e==KeyCode.Keypad1)
  {
    fly=!fly;     
  }
}
 
void Update()
{
  while(fly)
      {
        Fly();
      }
}
правда тут стоит подумать об отдельном потоке, который будет вас летать)))
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 437
23.09.2018, 11:24  [ТС]
V_Monomax, Это не виндовс форм это dll
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
24.09.2018, 08:30
Цитата Сообщение от pafka1997 Посмотреть сообщение
V_Monomax, Это не виндовс форм это dll
не уловил смысла реплики, если речь о потоке, то тут не важно вообще какой проект.

Добавлено через 2 минуты
Или это про нажатие кнопки, так и это мало важно, в текущем контексте, так как вам на вашем контроле что входит в библиотечку надо найти нажатие кнопки клавиатуры, и реализовывать логику в нем.
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 437
24.09.2018, 12:18  [ТС]
Usaga,
C#
1
2
3
4
5
if (Input.GetKeyDown(KeyCode.Keypad1))
            {
                AutoBeg();
                Fly = !Fly;
            }
ВОТ ЭТО КНОПКА подвергнуто цензуре, ЕСЛИ ТЫ НЕ ЗАМЕТИЛ Я ЛОГИКУ НЕМНОГО ИЗМЕНИЛ
0
Эксперт .NET
 Аватар для Usaga
14812 / 9585 / 1368
Регистрация: 21.01.2016
Сообщений: 36,101
24.09.2018, 12:41
pafka1997, полегче на поворотах, молодой человек.
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
24.09.2018, 14:24
pafka1997, кардинально не правильно использовать метод
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void AutoBeg()
        {
            if (Fly)
            {
                const byte VK_W = 0x57;
                const byte VK_SHIFT = 0x10;
                keybd_event(VK_W, 0, 0, UIntPtr.Zero);
                keybd_event(VK_SHIFT, 0, 0, UIntPtr.Zero);
                global::ChatUI.AddLine("[LastFelixClient] Fly", "Активирован");
            }
            else if (!Fly)
            {
                global::ChatUI.AddLine("[LastFelixClient] Fly", "Деактивирован");
                return;
            }
        }
Правильно сделать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public void AutoBeg()
        {
            if (Fly)
            {
                //методы вызываемые нажатием указанных клавишь
                global::ChatUI.AddLine("[LastFelixClient] Fly", "Активирован");
            }
            else if (!Fly)
            {
                global::ChatUI.AddLine("[LastFelixClient] Fly", "Деактивирован");
                return;
            }
        }
Тогда у вас не будет проблем, иначе у вас действительно, клавиатура блокируется.
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 437
24.09.2018, 19:58  [ТС]
V_Monomax, там нужен цикл в этом вся проблема иначе не работает залипание клавиши, Я использую данный код для автоматического бега и в игре нужны нажатые клавиши, а не просто один раз нажать. В этом и есть проблема БЕЗ ЦИКЛА НЕ РАБОТАЕТ

Добавлено через 9 минут
V_Monomax, Да, даже твой способ не работает. Тут нужно сделать другой способ перехвата клавиш. А как сделать другой понятия не имею
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
25.09.2018, 10:07
Цитата Сообщение от pafka1997 Посмотреть сообщение
залипание клавиши
Зачем вам блокировать управление пользователя???
Цитата Сообщение от pafka1997 Посмотреть сообщение
данный код для автоматического бега
Все правильно, пусть бежит себе, но он еще и должен поворачивать и подпрыгивать, зачем
Цитата Сообщение от pafka1997 Посмотреть сообщение
залипание клавиши
???
Цитата Сообщение от pafka1997 Посмотреть сообщение
и в игре нужны нажатые клавиши
тем более зачем
Цитата Сообщение от pafka1997 Посмотреть сообщение
залипание клавиши
???
Цитата Сообщение от pafka1997 Посмотреть сообщение
Тут нужно сделать другой способ перехвата клавиш
Вы что-то перемудрили, да так что рефакторинг для вас очень нужен, ну просто очень нужен и без него не обойтись.
Проблема ваша самая главная в том что вы не переиспользуете код, а пытаетесь сформировать аппаратное событие, а это уже клиника.
Примите для себя золотое правило АСУшника:
Ввод->Обработка->Сохранение-> Вывод
Что это означает?
Все просто:
Есть устройство ввода, пусть оно дает какие-либо сигналы, мы их принимаем, отрабатываем полученные значения, а затем их сохраняем и передаем на устройства вывода!
Заметьте, в этой цепочке мы ни разу, ни в коем случае, никакими коврижками, не отправляем данные на устройства ввода. Что я рекомендую и вам сделать!
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 437
25.09.2018, 15:21  [ТС]
V_Monomax, Раз предложили такой метод, объясните дураку как правильно его реализовать?
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
25.09.2018, 15:46
Все элементарно:
Есть контрол (ваше поле или сцена)
Есть логика: Идти, бежать, и т.д.
Есть логика взаимодействия
и пр.
Их надо разъединять и делать максимально независимыми друг от друга.
Что это означает?
А это значит что в не зависимости от нажатых на текущий момент клавиш, логика должна работать отдельно.
Проще говоря На вашем контроле перехватываем (подписываемся) нажатие клавиш, а в подписке изменяем некие переменные, которые у нас дают либо действие (например прыжок, соответственно действие - метод прыжок) либо меняют переменные которые создают условия для каких либо действий, например ваш метод бега или летания).
Так выглядит теория, на практике, есть множество путей, но за вас я путь выбрать не могу, поэтому могу только посоветовать, отдельно прописать каждое из действий, и потом уже при отлавливании нажатия клавиатуры или иного ус-ва ввода, запускать метод (void) или изменять соответствующую переменную, не забывая что все происходит по следующей схеме:
Ввод->Обработка->Сохранение-> Вывод
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 437
25.09.2018, 15:54  [ТС]
V_Monomax, Проще как может называться метод в игре который отвечает за передвижение персонажа? Т.к игра на c# можно посмотреть исходный код и найти этот метод, но без стандартных названий я не смогу его найти
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
25.09.2018, 16:10
Цитата Сообщение от pafka1997 Посмотреть сообщение
Проще как может называться метод в игре который отвечает за передвижение персонажа? Т.к игра на c# можно посмотреть исходный код и найти этот метод, но без стандартных названий я не смогу его найти
я не понял вас, разъясните где и что вы ищите?
0
23 / 20 / 1
Регистрация: 15.06.2018
Сообщений: 437
25.09.2018, 20:30  [ТС]
V_Monomax, в асемблере должен быть метод обрабатываемый нажатие клавиш в игре и у него должны быть стандартные названия событий как они могут называться к примеру Key и т.д
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
25.09.2018, 20:35
Цитата Сообщение от pafka1997 Посмотреть сообщение
в асемблере
Вы сменили ориентацию? Вы лезете не туда, в парадигме C# вам это не нужно, а вот в конструкторе посмотреть на контрол и найти в его настройках подписку на перехват нажатия кнопок. Все остальное вам не нужно, если укажите контрол к которому у вас привязана игра, то я постараюсь досказать что нужно настроить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.09.2018, 20:35

Выбор строки в CheckListbox в одно нажатие
Здравствуйте. Есть список строк в CheckListbox'е. Как сделать так, чтоб строка выбиралась (ставился/снимался флажок) в один клик мыши?

Код, который включает/выключает светодиоды на клавиатуре. Исправить код
Есть код, который включает/выключает светодиоды (Caps Lock, Num Lock и Scroll Lock) по нажатию любой клавиши. Компилятор TurboC 2.0 в...

Второе нажатие
Есть блок, при нажатии раскрывается меню. $("#controller").bind("click",function(){ Как мне сделать так, чтобы при втором нажатии...

ReactJS. Запретить второе нажатие на div.
Доброго времени суток! :) На div блок навешен onClick, определенный React компоненте. Вопрос: можно ли его убрать? Т.е. предотвратить...

Как реализовать первое, второе, третье нажатие на кнопку
Может switch попробовать реализовать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru