Я работаю над проектом GameEngine, и моя структура выглядит следующим образом: у меня есть класс Engine, который является базовым классом, который создает окно и настраивает открытый контекст GL и обрабатывает события сообщений Windows. Из этого у меня есть производный класс, который является классом Game. Некоторые функции являются чисто виртуальными. Мой проект слишком велик для размещения здесь, поэтому я покажу соответствующие сегменты кода.
Я работаю в этих двух классах, и задача, которую я пытаюсь достичь, — заставить объект исчезать и исчезать с помощью щелчка левой кнопкой мыши. Положение курсора мыши не имеет значения. Это легко сделать, изменив значение альфа с 1.0f до 0.0f. Объект изначально виден и при первом щелчке мышью & Операция освобождения происходит, мне нужно, чтобы она исчезла. Затем при следующем нажатии кнопки мыши & выпущен, мне нужно, чтобы он вернулся в поле зрения до полной непрозрачности. Я застрял в этой точке.
Это раздел моего Engine :: messageHandler (), который важен
Engine::MessageHandler( unsigned uMsg, WPARAM wParam, LPARAM lParam ) {
switch( uMsg ) {
// ... Irrelevant Code Here
case WM_LBUTTONDOW: {
m_mouseState.isButtonPressed[MOUSE_LEFT_BUTTON] = true;
mouseInput(); // purely virtual - implemented by Game class
return true;
}
case WM_LBUTTONUP: {
m_mouseState.isButtonPressed[MOUSE_LEFT_BUTTOM] = false;
mouseInput(); // purely virtual - implemented by Game class
return true;
}
// ... More Irrelevant Code Here
default {
return false;
}
}
} // messageHandler
Это в моей функции Game :: mouseInput (), где мне нужно изменить альфа-значение моего визуализированного объекта щелчком мыши & отпустить операцию.
void Game::mouseInput() {
} // mouseInput
И я попробовал, если заявления & пока петли безрезультатны.
Мне удавалось постепенно уменьшать объект постепенно, продолжая нажимать левую кнопку мыши. Код выглядел примерно так
Game::mouseInput {
static glm::vec4 sliceColor = m_pSliceFade->getColor();
if ( m_mouseState.isButtonPressed[MOUSE_LEFT_BUTTON] == true ) {
sliceColor.a -= 0.05f;
m_pSliceFade->setColor( sliceColor );
}
} // mouseInput
Тем не менее, это не то поведение, которое я хочу или нужно. Я борюсь здесь, потому что каждый раз, когда мы заходим в Engine :: messageHandler () для обеих кнопок мыши & up события мой чисто виртуальный Game :: mouseInput () вызывается. Я предполагаю, что у меня есть блок писателей, потому что я не могу понять, как непрерывно изменять альфа-значение после каждого клика & отпустите событие и затем измените направление значения альфа на следующий щелчок & выпуск релиза в этих рамках. Изначально все кнопки мыши для переменных отслеживания bool по умолчанию имеют значение false при инициализации.
Любые предложения или помощь будут полезны и полезны. Заранее благодарю.
Задача ещё не решена.