[SFML] Szybkie Kliknięcia i bug z GUIwasHover
Ostatnio zmodyfikowano 2024-09-23 21:00
tBane Temat założony przez niniejszego użytkownika |
[SFML] Szybkie Kliknięcia i bug z GUIwasHover » 2024-09-23 20:43:36 Witam. Mam problem polegający na tym, że program "rysuje teren", choć nie powinien. Gdy klikniemy parokrotnie na jakimś przycisku (palety terenu lub narzędziu) to jakimś sposobem program omija zabezpieczenie (GUIisHover) no i właśnie rysuje teren. Nie wiem jak to naprawić. Link do programu Edytora Map: https://github.com/tBane1995/RPG2D/releases/tag/ReleaseKod, który nie wiem dlaczego nie działa: while( window->isOpen() ) { prevTime = currentTime; currentTime = timeClock.getElapsedTime(); mousePosition = sf::Mouse::getPosition( * window ); worldMousePosition = window->mapPixelToCoords( mousePosition ); GUIwasHover = false; GUIwasClicked = false; MapEditorUnclickButtons(); MapEditorHoverButtons(); if( !GUIwasHover ) { if( prefabToPaint != nullptr ) { if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) ) { if( tool == toolType::Brush || tool == toolType::RectBrush ) { if( prefabToPaint->type == gameObjectType::Terrain ) editTiles(); } } } } |
|
pekfos |
» 2024-09-23 20:53:27 virtual void unclick() { if(( currentTime - clickTime ).asSeconds() > 0.1f ) { sprite.setColor( idleColor ); changeColor(); state = buttonState::idle; } }
virtual void hover() { if( state != buttonState::pressed ) { float w = sprite.getTexture()->getSize().x; float h = sprite.getTexture()->getSize().y; float x = sprite.getPosition().x; float y = sprite.getPosition().y; if( worldMousePosition.x > x - w / 2.0f && worldMousePosition.x < x + w / 2.0f && worldMousePosition.y > y - h / 2.0f && worldMousePosition.y < y + h / 2.0f ) { changeColor(); state = buttonState::hover; GUIwasHover = true; } Może ustawianie GUIwasHover nie powinno być warunkowe. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-09-23 21:00:38 Jakie to teraz proste! :-) Dzięki virtual void hover() { if( state != buttonState::pressed ) { float w = sprite.getTexture()->getSize().x; float h = sprite.getTexture()->getSize().y; float x = sprite.getPosition().x; float y = sprite.getPosition().y; if( worldMousePosition.x > x - w / 2.0f && worldMousePosition.x < x + w / 2.0f && worldMousePosition.y > y - h / 2.0f && worldMousePosition.y < y + h / 2.0f ) { state = buttonState::hover; changeColor(); GUIwasHover = true; } } else { GUIwasHover = true; } }
|
|
« 1 » |