Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переключатель 
:(
    Опции темы
shadowmaster63
  Дата 11.1.2010, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Есть обработка нажатия кнопки в Update()

Код

if (keyboardState.IsKeyDown(Keys.Z))
               {
               
                   if (true)
                   {
делать это
                      
                   }
                   else if (true0)
                   {
делать это
                   }
}


Проблема в том что при её нажатии выполняется первое условие и тут же снова выполняется второе нажатие тоесть как будто клавиша всё еще нажата.. поэтому выполняется и второе условие... кнопка вроде как переключателя служит...
Подскажите что не так и как организоать переключатель на основе нажатия кнопки ?

Это сообщение отредактировал(а) shadowmaster63 - 11.1.2010, 20:45
PM MAIL   Вверх
InvalidProperty
Дата 12.1.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: нет
Всего: 9



судя по быдлокоду, первое условие выполнится всегда. А что такое переменная true0?


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
Rpahut
Дата 13.1.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 5
Всего: 7



shadowmaster63, дело вероятно в том, что пока вы держите кнопку, этот кусок успевает выполниться несколько раз. Если вы хотите чтобы кнопка работала как переключатель, программа должна реагировать на отдельные нажатия.

Код

bool sdelano = false;
bool pereklu4atel = false;
.....
if (!sdelano && keyboardState.IsKeyDown(Keys.Z)) {
                   if (true==pereklu4atel) {
                               // делать это
                               pereklu4atel = false;
                   }
                   else {
                               // делать то
                               pereklu4atel = true;
                   }

                   sdelano = true;
}

if (keyboardState.IsKeyUp(Keys.Z)) {
                   sdelano = false;
}


Поскольку вопрос сам по себе не имеет отношения к разработке игр, правильнее было его задать в разделе С++ Общие вопросы.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Rickert
Дата 14.1.2010, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Человек работает именно с игрой, возможно "развитие событий/кода". Пока оставим, подождём smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Fantaz1
Дата 15.1.2010, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 16.1.2009

Репутация: нет
Всего: нет



Соглашусь с Rpahut. Это скорее всего программа успевает за одно нажатие клавиши Z пройти функцию несколько раз. Можеш попробывать это решить так:
Код

//Объявить в начале проги переменную которая содержит старое состояние клавиатуры  
KeyboardState oldKey;


if (keyboardState.IsKeyDown(Keys.Z) && oldkey.IsKeyUp(Keys.Z))    //Проверяем нажата ли кнопка Z и не была ли она нажата до этого 
               {
               
                   if (true)
                   {
делать это
                      
                   }
                   else if (true0)
                   {
делать это
                   }
}
oldKey = keyboardState;


Это сообщение отредактировал(а) Fantaz1 - 15.1.2010, 23:03
PM MAIL   Вверх
Rickert
Дата 16.1.2010, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Вообщем, логика работы с клавишами должна быть такой: ты нажимаешь кнопку, она заносится в некий список нажатых клавиш, каждая из которых потом обрабатывается. Если ты отпустил кнопку - она удаляется из списка.

Модератор: Народ, кончайте флудить, уже третий пост стираю и всё одна тема - куда же перенести и где же правильно было бы запостить.

Это сообщение отредактировал(а) Rickert - 18.1.2010, 17:06


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.