DejaVu |
» 2024-02-15 22:23:38 Jeśli komunikaty "jest event i dziala" oraz "jest zdarzenie GUI i dziala" są wyświetlane poprawnie, ale nie pojawia się komunikat "naduszony przycisk i nie dziala", problem prawdopodobnie leży w identyfikacji zdarzenia kliknięcia przycisku lub w identyfikatorach przycisków.
Rozważmy potencjalne przyczyny i sposoby ich rozwiązania:
1. Błędne Identyfikatory Przycisków Upewnij się, że identyfikatory (id), które przypisujesz przyciskom przy tworzeniu, rzeczywiście odpowiadają tym, które sprawdzasz w switch(id) w MyEventReceiver. Przykład tworzenia przycisku z określonym ID brzmiałby:
cpp Copy code // Przy tworzeniu przycisku, upewnij się, że przypisujesz odpowiednie ID. env->addButton(rect<s32>(10,10,110,50), 0, 101, L"World"); env->addButton(rect<s32>(10,60,110,100), 0, 102, L"Help"); 2. Niewłaściwa Obsługa Zdarzeń Jeśli case EGET_BUTTON_CLICKED: nie działa, może to oznaczać, że EGET_BUTTON_CLICKED nie jest poprawnie rozpoznawany jako typ zdarzenia. To byłoby jednak niezwykłe, biorąc pod uwagę, że mówisz, iż "jest zdarzenie GUI i dziala". Upewnij się, że zdarzenia kliknięcia są generowane przez GUI, co w tym przypadku wydaje się być potwierdzone.
3. Zakłócenia w Przepływie Zdarzeń Rzadko, ale możliwe, że coś zakłóca przepływ zdarzeń przed dotarciem do logiki switch. To jednak jest mało prawdopodobne, biorąc pod uwagę strukturę kodu.
4. Debugowanie Dodaj Więcej Informacji Debugowania: Rozszerz debugowanie, aby zawierało więcej informacji. Na przykład, wydrukuj id przycisku i typ zdarzenia GUI: cpp Copy code std::cout << "ID przycisku: " << id << ", Typ zdarzenia: " << event.GUIEvent.EventType << std::endl; Sprawdź Typ Zdarzenia GUI: Upewnij się, że zdarzenie, które otrzymujesz, to faktycznie EGET_BUTTON_CLICKED. Możliwe, że otrzymujesz inne zdarzenie GUI, które nie jest obsługiwane w twoim kodzie. 5. Weryfikacja Tworzenia Przycisków Upewnij się, że przyciski są poprawnie tworzone z przypisanymi identyfikatorami i że są one częścią GUI. Możliwe, że przyciski nie są poprawnie rejestrowane w systemie zdarzeń GUI.
Podsumowanie Jeśli powyższe kroki nie rozwiążą problemu, możesz spróbować uprościć kod, tworząc minimalny przykład, który tylko próbuje obsłużyć kliknięcie jednego przycisku, aby zobaczyć, czy problem nadal występuje. Upewnienie się, że środowisko deweloperskie jest poprawnie skonfigurowane i że używasz odpowiednich wersji bibliotek Irrlicht, również może pomóc w rozwiązaniu problemu.
|
|
DejaVu |
» 2024-02-15 22:25:48 |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-02-15 22:36:19 na normalnych przyciskach działa, więc może faktycznie to jakiś inny typ eventu env->addButton( rect < s32 >( 10, 10, 110, 50 ), 0, 101, L"World" ); env->addButton( rect < s32 >( 10, 60, 110, 100 ), 0, 102, L"Help" );
a na tym już nie działa IGUIContextMenu * menu = env->addMenu(); menu->addItem( L"World", 101, true, true ); menu->addItem( L"Help", 102, true, true );
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-02-15 22:59:43 zauważyłem, że elementy menu są indeksowane od 0. Tzn w menu World są indeksy od 0 do 3, zaś w menu Help 0-1. Nie ma znaczenia czy ID przypisuje czy też nie ... enum { GUI_ID_CREATEWORLD, GUI_ID_LOADWORLD, GUI_ID_SAVEWORLD, GUI_ID_GENERATEWORLD, GUI_ID_TUTORIAL, GUI_ID_INFO };
IGUIContextMenu * menu = GUI->addMenu(); menu->addItem( L"World", - 1, true, true ); menu->addItem( L"Help", - 1, true, true );
IGUIContextMenu * worldMenu = menu->getSubMenu( 0 ); worldMenu->addItem( L"Create World", GUI_ID_CREATEWORLD ); worldMenu->addItem( L"Load World", GUI_ID_LOADWORLD ); worldMenu->addItem( L"Save world", GUI_ID_SAVEWORLD ); worldMenu->addItem( L"Generate World", GUI_ID_GENERATEWORLD ); IGUIContextMenu * helpMenu = menu->getSubMenu( 1 ); helpMenu->addItem( L"Tutorial", GUI_ID_TUTORIAL ); helpMenu->addItem( L"Info", GUI_ID_INFO ); |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-02-16 01:54:27 Znalazłem rozwiązanie:bool MyEventReceiver::OnEvent( const SEvent & event ) { if( event.EventType == EET_GUI_EVENT ) { switch( event.GUIEvent.EventType ) { case gui::EGET_MENU_ITEM_SELECTED: { gui::IGUIContextMenu * menu =( gui::IGUIContextMenu * ) event.GUIEvent.Caller; s32 id = menu->getItemCommandId( menu->getSelectedItem() ); switch( id ) { case GUI_ID_CREATEWORLD: createWorld(); break; case GUI_ID_LOADWORLD: loadWorld(); break; case GUI_ID_SAVEWORLD: saveWorld(); break; case GUI_ID_GENERATEWORLD: generateWorld(); break; case GUI_ID_TUTORIAL: tutorial(); break; case GUI_ID_INFO: info(); break; } } break; default: break; } } return false; }
|
|
1 « 2 » |