2017-03-19 3 views
2

내 게임을위한 메뉴 시스템을 만들고 메뉴를 만들 때 버튼을 만들려고하므로 클릭 이벤트에서 실행할 명령 (또는 함수) 집합을 전달할 수 있습니다.Monogame/XNA 클릭시 수신기를 입력하거나 함수를 실행 하시겠습니까?

나는, Screenenum 매개 변수를 ChangeScreen라는 기능을 가지고 있고, 내가 좋아하는, 이벤트를 듣고 버튼에이 기능을 통과 할 수 있도록하고 싶습니다 그래서 (의사 코드 입력) :

menuButtons.Add(new MenuButton(ChangeScreen(Screen.Settings), texture, hovertexture, position));

나는 다음 menuButtons 이상 열거하고 각 버튼의 UpdateDraw 메서드를 호출 할 것입니다. 이 아이디어가 마음에 들지만 각 버튼을 구체적으로 확인하기 위해 if 문을 작성하는 대신 각 변수에 직접 MenuButton을 할당하는 것보다 상대적으로 효율적으로 보입니다.

그래도 내가 좋아하는 유일한 유스 케이스는 아닙니다. 가능한 경우, 나는 방법에 전달할 수 싶어요 같은 :

menuButtons.Add(new MenuButton(new Method() { variableToSet = 1; }, texture, hovertexture, position));

나는 Action를 사용하여 시도하지만 난 그냥 제대로이 일에 대해 이동하는 방법을 이해하지 않습니다. 가능한 모든 것이 있습니까? 아니면 비슷한 해결책이 있습니까?

+0

그래서 UI 요소를 누를 때마다 어떤 종류의 콜백을 만들고 싶습니까? –

+0

예,하지만 MenuButton을 만들 때 새로운 기능을 전달하려고합니다. – zuddsy

+0

나는 당신이 무엇을 요구하고 있는지 분명히 생각하지 않는다. 어쩌면 당신의 질문에 답을 해보고 더 많은 대답을 얻을 수도 있습니다. – craftworkgames

답변

0

그래서 나는 내가 얻을 수있는 것만 큼 가까운 해결책을 찾아 냈습니다.

if (onClick != null && onClick.GetInvocationList().Length > 0) 
{ 
    OnClick(new EventArgs()); 
} 

을 그럼, 각 버튼을 만들 때, 그것은 다음과 같은 : 내가 Update()에 클릭을 확인하고 싶을 때 내 MenuButton 객체에서

, 나는

public delegate void ButtonEventHandler(object sender, EventArgs e); 
public event ButtonEventHandler onClick; 

있습니다 :

MenuButton button = new MenuButton(); 
button.onClick += MethodToExecute; 
menuButtons.Add(button); 

MethodToExecute(object sender, EventArgs e) 버튼을 가져 가고 싶습니다.

그럼 간단히 루프를 걸어서 menuButtons을 업데이트하고 필요에 따라 각각을 그립니다.

관련 문제