2016-11-19 92 views
0

所以這是我有多遠。 (不算多,我知道),但我有這樣的事情: 稱爲「閃屏」如何將「Click Event」添加到課程中?在C#

private DynamicButton dynButton; 

public override void Init(ContentManager Content) 
    { 
     base.Init(Content); 

     dynButton = new DynamicButton("Test", new Vector2(450, 100), Color.White);} 

private void Dyn_Click(object sender, EventArgs e) 
    { 
     dynButton.ObjColor = Color.DarkOrange; //I want to do stuff here 
    } 

public override void Update(GameTime gameTime) 
    { 
     base.Update(gameTime); 
     dynButton.Update(gameTime); 
     dynButton.Click += Dyn_Click; 
    } 

在我的動態按鈕類A類,如下所示:

public event EventHandler Click; 

    public override void Update(GameTime gameTime) 
    { 
     base.Update(gameTime); 
     this.Click += DynamicButton_Click; 
    } 

    private void DynamicButton_Click(object sender, EventArgs e) 
    { 

    } 

我真的不知道如何獲得Click事件的權利。所以就像我必須用我的鼠標從對象中檢查我的範圍,這是我所知道的,但我怎麼能讓事件觸發。我只是想調用像dynButton.Click + = myMethod並在這種方法中,我會做的東西。希望你明白我的意思(我很新)

+0

如何:實現在類活動:https://開頭MSDN。 microsoft.com/en-us/library/5z57dxz2(v=vs.90).aspx – user3185569

+0

您確定要點擊事件嗎? XNA/Monogame使用了一個更新範例,每秒調用一次Update方法60次,通常,您將針對您在遊戲中使用的按鍵/按鈕輪詢鼠標/鍵盤/控制器,並且如果輪詢結果爲按鍵/按鈕按下,那麼你調用適當的方法。 –

回答

0

Xna和Monogame在正常情況下(基於設備)調用Update方法每秒30到60次。

這意味着,如果你想使用事件;在方法本身上訂閱它們是一個非常糟糕的主意,因爲您每次都會獲得新訂閱。在您發佈的代碼中,您每秒會訂閱60次該活動!

public event EventHandler Click; 

public override void Update(GameTime gameTime) 
{ 
    base.Update(gameTime); 
    this.Click += DynamicButton_Click; // Called 60 times per frame on a PC! 
} 

我不是說你不應該訂閱這種方法,你可以但基於一個條件。切勿自由行事。

這就是說,你想要的是在一個安全的地方訂閱事件,然後在滿足條件時觸發它。訂閱,在你的情況下,將採取啓動屏幕上的地方:

public override void Init(ContentManager Content) 
{ 
    base.Init(Content); 

    dynButton = new DynamicButton("Test", new Vector2(450, 100), Color.White); 
    dynButton.Click += SomeoneClicked; 
} 

private void SomeoneClicked(object sender, EventArgs e) 
{ 
    // Your code here. 
} 

動態按鈕是一個負責觸發事件(但不應對事件本身)。

public event EventHandler Click; 

public override void Update(GameTime gameTime) 
{ 
    base.Update(gameTime); 
    if(this.Click != null) 
     Click(null, null); 
} 

您可以找到有關在MSDN事件處理器的詳細信息。作爲最後一點,我認爲這是你面臨的最大問題;你需要確切地知道何時發生事件。根據您的意見,您需要檢查基礎上的鼠標,這是很容易通過MouseState provided methods做的位置的特定條件:

MouseState ms = Mouse.GetState(); 
var positionX = ms.X; 
var positionY = ms.Y; 
+0

謝謝,這真的很有幫助 –