Cześć! Chciałbym sprawdzić czy podczas trzymania lewego przycisku myszy zmienna jest równa 1, jeśli tak, wykonać operację. Jednak Gdy trzymam lpm, a bool przed kliknięciem wynosił 1 zmienia stan na 0, co uniemożliwia wykonanie operacji. Mogłem trochę zagmatwać sprawę, dlatego może pokaże to w kodzie.
class InputManager
{
public:
InputManager() {}
void UpdateEvent(SDL_Event& event) {
this->event = event;
}
bool MouseMotion() {
if (event.type == SDL_MOUSEMOTION) {
float x = (float)event.motion.x;
float y = (float)event.motion.y;
setMouseCoords(x, y);
return true;
}
return false;
}
bool CheckMouseBounds(int minX, int maxX, int minY, int maxY)
{
bool collisionX = mouseCoords.x >= minX && mouseCoords.x <= maxX;
bool collisionY = mouseCoords.y >= minY && mouseCoords.y <= maxY;
return collisionX && collisionY;
}
bool MouseButtonDown(int button)
{
if (event.type == SDL_MOUSEBUTTONDOWN) {
if (event.button.button == button) {
return true;
}
}
return false;
}
bool MouseButtonUp(int button)
{
if (event.type == SDL_MOUSEBUTTONUP) {
if (event.button.button == button) {
return true;
}
}
return false;
}
private:
SDL_Event event;
};
int main(int argc,char* args[] ) {
InputManager input;
Test test;
while(!quit) {
while(SDL_PollEvent(&event)) {
input.UpdateEvent(event);
test.UpdateInput(input);
}
...
}
return 0;
}
class Test {
public:
Test() {}
void UpdateInput(InputManager input) {
while(input.MouseMotion()) {
check = input.CheckMouseBounds(x, y, x + w, y+ h);
std::cout<<check<<std::endl;
if(input.MouseButtonDown(SDL_BUTTON_LEFT && check) {
DoSomething();
}
}
}
void DoSomething() {
...
}
private:
bool check = false;
}
W metodzie UpdateInput sprawdzam czy check jest w obszarze, w którym klik ma działać. Wypisuje na ekranie, kiedy kursor jest w tym obszarze, ale lewy przycisk nie jest kliknięty - check = true
, kiedy jest w tym obszarze i kliknę lewy przycisk - check
zmienia się na false
, przez co operacja nie jest wykonywana.
W jaki sposób to naprawić?