키보드 입력을 관리하는 클래스가 있으며 KeyPressed, KeyReleased 또는 KeyHeld 이벤트가 발생합니다. 키가 내 컨트롤러 구성 요소의 KeyBindings 컬렉션에있는 경우에만 이벤트를 발생시킵니다. 이제는 모든 작업이 문제에 봉착했습니다. 내가 원하는 것은 다음과 같습니다 :컬렉션에 함수를 추가하려면 어떻게합니까?
Key pressed.
if(Key bind exists)
Fire key pressed event.
foreach(function in keyBinds)
{
execute function, fire event, whatever...
}
foreach 루프가 어떻게 작동하는지 알 수 없습니다. 어떻게 이런 식으로 끌어낼 수 있을지에 대한 아이디어가 있습니까?
KeyboardController 구성 요소 :
public class KeyboardController : IComponent
{
//Fields
private Dictionary<Keys, HashSet<Delegate>> m_keyBindings = new Dictionary<Keys,HashSet<Delegate>>();
//Properties
public Dictionary<Keys, HashSet<Delegate>> KeyBindings
{
get { return m_keyBindings; }
}
}
이는 키와 그 기능/대표/이벤트/어떤 바인딩을 포함하는 클래스입니다. 클래스는 데이터를 저장하기위한 것이기 때문에 이벤트 코드는이 클래스 내에 포함될 수 없습니다. 이 바인딩을 누를 때 수행 할 키 바인딩과 작업 또는 동작 집합을 전달해야합니다.
바인딩을 추가 : 작업 :
//Set key bindings
KeyboardController kbController = entityManager.GetComponent<KeyboardController>(1);
kbController.KeyBindings.Add(Keys.Up, new HashSet<Delegate>());
kbController.KeyBindings[Keys.Up].Add(function);
내가 "바인딩을 추가"에서 세 번째 줄을 만드는 방법을 알고하지 않습니다.
기능의 컬렉션을 유지할 수 있습니다 기음#? http://msdn.microsoft.com/en-us/library/8627sbea.aspx –
아니요, 특정 KeyPress 이벤트가 실행될 때 함수/이벤트/실행/실행의 컬렉션이있는 특정 기능을 찾고 있습니다. 해고 됐어. 저는 의지할만한 이벤트를 "할 수있게"하고 싶습니다. – Kittoes0124
나는 본다. 다른 가능한 해결책을 가진 대답을 추가하고 있습니다. –