2015-05-22 17 views
5

Khi phát triển mod cho Thành phố: Đường chân trời, tôi đã gặp phải vấn đề.Tại sao sự kiện nút giao diện người dùng được thêm này không được gọi?

Hầu hết mã của tôi, theo như tôi có thể nói, hoạt động tốt - nhưng cho đến nay, tôi không phải thử nghiệm nó. Điều này là bởi vì tất cả nên được gọi theo thứ tự khi một nút tôi đã thêm vào giao diện người dùng được nhấp vào. Sự kiện nhấp vào nút này không gọi trình xử lý mà tôi đã gán cho nó.

Đây là nơi tôi có thể tạo các nút:

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(); 
    } 
} 

Theo documentation Tôi đã làm theo, sử dụng

button.eventClick += ButtonClick; 

nên thêm ButtonClick như xử lý nhấp chuột cho nút. Tuy nhiên, nhấp vào nút không có gì. Thông báo gỡ lỗi khi bắt đầu trình xử lý (thông báo "LOGIC") không được hiển thị (lưu ý: thông báo gỡ lỗi trước đây về cách thêm nút vào giao diện người dùng). Không có thông báo lỗi nào được hiển thị trong bảng điều khiển gỡ lỗi của trò chơi hoặc trong VS.

Tôi cũng đã thử sử dụng new MouseEventHandler(ButtonClick), vì tài liệu nội tuyến VS cho tôi biết loại eventClickMouseEventHandler. Điều này không hiển thị bất kỳ lỗi nào trong VS hoặc trò chơi, nhưng cũng không hoạt động.

(Lưu ý: có official documentation, nhưng đó là bên cạnh vô dụng.)

Có ai ở đây có kinh nghiệm với C: S API? Tại sao sự kiện này không được gọi?

Trả lời

1

Các bạn đã thử:

//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(); 
}; 

Cũng có bạn đã cố gắng làm điều này ?:

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

(Xin lỗi, tôi không thể coment chưa)

+0

Không có công việc nào trong số này, nhưng dù sao cũng cố gắng! – ArtOfCode

2

Bạn có thể thử tham gia một nhỏ lùi lại để kiểm tra xem một thành phần UI khác có hoạt động hay không; ví dụ: bằng cách làm theo ví dụ để thêm UILabel. Đăng ký trình xử lý sự kiện nhấp chuột vào trình xử lý sự kiện này có thể có thể hoạt động, vì có một ví dụ thực tế để theo dõi; mặc dù, tài liệu hướng dẫn để đặt mã này bên trong phương thức Bắt đầu. Tôi không chắc chắn, nhưng có lẽ UIButton trong mã của bạn nên được đặt trong một phương pháp bắt đầu là tốt.

Là một sang một bên, tôi tình cờ gặp liên kết này cho debugging. Skylines dường như có hệ thống nhắn tin riêng để gỡ lỗi.

Cái gì mà tôi đã làm thông báo trong mã của bạn là báo cáo kết quả gỡ lỗi đầu tiên sử dụng một phương pháp khác với tuyên bố gỡ lỗi thứ hai:

  1. Debug.LogDebugMessage ("Thêm nút 'Báo cáo Thành phố Generate' đến giao diện người dùng") ;
  2. Debug.LogWarningMessage ("HIGH LOGIC: Bắt đầu tạo báo cáo.");

Nó có thể không tạo ra bất kỳ sự khác biệt nào, nhưng tôi sẽ kiểm tra cuộc gọi Debug.LogWarningMessage bằng cách di chuyển nó tới Debug.LogDebugMessage để xem nó có thực sự hoạt động hay không.

Theo tài liệu cực kỳ ngắn gọn, có tệp nhật ký được gọi là output_log.txt, có lẽ có thể có một số thông tin chứa trong tệp này.

+0

Hai phương thức gỡ lỗi là của riêng tôi: chúng chỉ đơn giản gọi phương thức gỡ lỗi API với các tham số hơi khác nhau, hoạt động tốt. Ý tưởng tốt về việc lùi một bước. – ArtOfCode

+0

Thật không may, điều này không hoạt động ... – ArtOfCode

1

Dường như trình xử lý nhấp chuột của bạn, như vậy, là OK. Thay đổi phương thức ButtonClick của bạn thành:

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

và sau đó kiểm tra đầu ra gỡ lỗi. Nếu bạn gặp lỗi sau dòng đó, thì thông báo gỡ lỗi có thể không hiển thị.

Các vấn đề liên quan