2015-05-22 19 views
5

Opracowując mod dla miast: sylwetki na tle nieba, natknąłem się na problem.Dlaczego nie zostało wywołane to wydarzenie przycisku interfejsu użytkownika?

Większość mojego kodu, o ile wiem, działa dobrze - ale do tej pory nie muszę go testować. Dzieje się tak, ponieważ wszystkie powinny być wywoływane w kolejności po kliknięciu przycisku dodanego do interfejsu użytkownika. Zdarzenie click na tym przycisku nie wywołuje procedury obsługi, którą do niej przypisałem.

To gdzie tworzę przycisku:

public class LoadingExtension : LoadingExtensionBase 
{ 
    public override void OnLevelLoaded(LoadMode mode) 
    { 
     Debug.LogDebugMessage("Adding 'Generate City Report' button to UI"); 

     // Get the UIView object. This seems to be the top-level object for most 
     // of the UI. 
     var uiView = UIView.GetAView(); 

     // Add a new button to the view. 
     var button = (UIButton)uiView.AddUIComponent(typeof(UIButton)); 

     // Set the text to show on the button. 
     button.text = "Generate City Report"; 

     // Set the button dimensions. 
     button.width = 250; 
     button.height = 30; 

     // Style the button to look like a menu button. 
     button.normalBgSprite = "ButtonMenu"; 
     button.disabledBgSprite = "ButtonMenuDisabled"; 
     button.hoveredBgSprite = "ButtonMenuHovered"; 
     button.focusedBgSprite = "ButtonMenuFocused"; 
     button.pressedBgSprite = "ButtonMenuPressed"; 
     button.textColor = new Color32(255, 255, 255, 255); 
     button.disabledTextColor = new Color32(7, 7, 7, 255); 
     button.hoveredTextColor = new Color32(7, 132, 255, 255); 
     button.focusedTextColor = new Color32(255, 255, 255, 255); 
     button.pressedTextColor = new Color32(30, 30, 44, 255); 

     // Enable button sounds. 
     button.playAudioEvents = true; 

     // Place the button. 
     button.transformPosition = new Vector3(-1.0f, 0.97f); 

     // Respond to button click. 
     // NOT GETTING CALLED 
     button.eventClick += ButtonClick; 
    } 

    public void ButtonClick(UIComponent component, UIMouseEventParameter eventParam) 
    { 
     Debug.LogWarningMessage("HIGH LOGIC: Beginning report generation."); 
     string now = DateTime.Now.ToFileTime().ToString(); 
     string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
     string filename = filepath + "\\CityReport-" + now + ".xlsx"; 
     Output fileCreator = new Output(filename); 
     fileCreator.GenerateReport(); 
    } 
} 

Według documentation Śledzę korzystając

button.eventClick += ButtonClick; 

należy dodać ButtonClick jako przewodnika click dla przycisku. Jednak kliknięcie przycisku nic nie robi. Komunikat debugowania na początku programu obsługi (komunikat "HIGH LOGIC") nie zostanie wyświetlony (uwaga: wcześniejsza wiadomość debugowania o dodaniu przycisku do interfejsu użytkownika). Żadne komunikaty o błędach nie są wyświetlane w panelu debugowania gry ani w VS.

Próbowałem również używać new MouseEventHandler(ButtonClick), ponieważ dokumentacja wbudowana VS mówi mi, że typ eventClick jest MouseEventHandler. To nie pokazuje żadnych błędów w VS ani w grze, ale też nie działa.

(Uwaga: nie jestofficial documentation, ale to jest obok bezużyteczny.)

Czy ktoś tutaj ma doświadczenie z C: S API? Dlaczego to wydarzenie nie jest wywoływane?

Odpowiedz

1

Czy próbowałeś:

//button.eventClick += ButtonClick; 
button.eventClick += (c,e) => { 
    Debug.LogWarningMessage("HIGH LOGIC: Beginning report generation."); 
    string now = DateTime.Now.ToFileTime().ToString(); 
    string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
    string filename = filepath + "\\CityReport-" + now + ".xlsx"; 
    Output fileCreator = new Output(filename); 
    fileCreator.GenerateReport(); 
}; 

Również próbowałeś to zrobić ?:

//var button = (UIButton)uiView.AddUIComponent(typeof(UIButton)); 
var button = uiView.AddUIComponent(typeof(UIButton)) as UIButton 

(Niestety, nie mogę jeszcze coment)

+0

Żadne z tych elementów nie działa, ale dzięki za próbę! – ArtOfCode

2

Możesz spróbować biorąc mały cofnij się, aby sprawdzić, czy działa inny element interfejsu; na przykład, postępując zgodnie z przykładem dodawania UILabel. Zarejestrowanie obsługi zdarzeń kliknięcia może być skuteczne, ponieważ istnieje prawdziwy przykład do naśladowania; chociaż dokumentacja mówi, aby umieścić ten kod w metodzie Start. Nie jestem pewien, ale może UIButton w twoim kodzie powinien być również umieszczony w metodzie Start.

Na bok natknąłem się na ten link dla debugging. Wydaje się, że linie horyzontu mają własny system komunikacyjny do debugowania.

Coś, co zauważyłem w kodzie jest, że pierwsze sprawozdanie Debug używa innej metody niż drugi oświadczenia debug:

  1. Debug.LogDebugMessage („Dodawanie«Generowanie Miejskiej raport»przycisk do interfejsu”) ;
  2. Debug.LogWarningMessage ("WYSOKA LOGIKA: Rozpoczęcie generowania raportu.");

To może nie zrobić żadnej różnicy, ale wypróbowałbym wywołanie Debug.LogWarningMessage, przesuwając je tam, gdzie Debug.LogDebugMessage ma sprawdzić, czy faktycznie działa.

Według niezwykle zwięzłej dokumentacji istnieje plik dziennika o nazwie output_log.txt, być może w pliku tym mogą znajdować się informacje.

+0

Obie metody debugowania są moje: po prostu wywołują metodę debugowania interfejsu API z nieco innymi parametrami, co działa dobrze. Dobry pomysł na zrobienie kroku wstecz. – ArtOfCode

+0

Niestety to nie działa ... – ArtOfCode

1

Wygląda na to, że twój moduł obsługi kliknięć, jako taki, jest OK. Zmienić metodę ButtonClick do:

public void ButtonClick(UIComponent component, UIMouseEventParameter eventParam) 
{ 
    Debug.LogWarningMessage("HIGH LOGIC: Beginning report generation."); 
} 

a następnie sprawdzić wyjście debugowania. Jeśli masz błąd po tym, jak linia jest, komunikat debugowania może być niewidoczny.

Powiązane problemy