2016-11-19 1 views
0

그래서 지금까지 내가 가지고있는 것입니다. (그렇게 많이 나는 모른다) 그러나 나는 이런 식으로 뭔가를 가지고 : "로 SplashScreen"클래스에 '클릭 이벤트'를 추가하는 방법은 무엇입니까? in 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; 
    } 

그리고 내 동적 버튼 클래스라는 클래스는 다음과 같이

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) 
    { 

    } 

난 정말 몰라 클릭 이벤트를 올바르게 얻는 방법. 그래서 내가 쥐가있는 물체에서 경계선을 확인해야만하는 것입니다. 그것은 내가 아는 것입니다.하지만 어떻게하면 이벤트가 발생하는지 확인할 수 있습니다. 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은 일반적인 상황 (기기에 기반)에서 초당 30 ~ 60 회 Update 방법을 호출한다.

즉, 이벤트를 사용하려는 경우; 매회 새로운 구독을 얻으므로 메서드 자체에서 구독하는 것은 매우 나쁜 생각입니다. 게시 한 코드에서 이벤트를 초당 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에 EventHandlers에 대한 자세한 정보를 찾을 수 있습니다. 최종 메모로서 이것이 가장 큰 문제라고 생각합니다. 언제 행사를해야하는지 정확히 알아야합니다. 귀하의 의견에 따라, 당신은 쉽게 MouseState provided methods 통해 이루어집니다 마우스의 위치에 따라 특정 조건을 확인해야합니다

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

정말 고맙습니다. –

관련 문제