클래스 'KeyEvent'가 있습니다. 어떤의 구성원 중 하나는 다음인수가있는 델리게이트 사용
private eventmethod em;
생성자 :
public KeyEvent(eventmethod D) {
em = D;
}
public KeyEvent(eventmethod D, object[] args) : this(D) {
this.args = args;
}
public KeyEvent(Keys[] keys, eventmethod D, object[] args) : this(keys, D) {
this.args = args;
}
'eventmethod'방법
public delegate void eventmethod(object[] args);
생성자에서 객체 전달 방법
이 부재에 저장된 공개 메서드 "ThrowEvent"를 사용하여 호출됩니다.public void ThrowEvent() {
if (!repeat && thrown) return;
em.DynamicInvoke(args);
this.thrown = true;
}
내가 볼 수있는 한, 이것은 잘 컴파일됩니다. 하지만이 클래스 (KeyEvent)의 인스턴스를 만들려고 할 때 나는 잘못된 것을하고있다.
static public void ChangeSquareSpeed(Vector2 squarespeed) {
}
어쨌든, 잘못된 라인이 하나입니다 : 이것은 내가 지금까지 무엇을 가지고 :
object[] args = {new Vector2(0.0f, -200.0f)};
Keys[] keys = { Keys.W };
KeyEvent KeyEvent_W = new KeyEvent(keys, new KeyEvent.eventmethod(GameBase.ChangeSquareSpeed), args);
GameBase.ChangeSquareSpeed 순간에 아무것도하지 않지만, 다음과 같습니다
KeyEvent KeyEvent_W = new KeyEvent(keys, new KeyEvent.eventmethod(GameBase.ChangeSquareSpeed), args);
컴파일러 나에게 주시는 오류 :
오류 CS: 'ChangeSquareSpeed'경기 대리인 없음 과부하 'BLBGameBase.KeyEvent.eventmethod'
내 질문은 : 내가 가지고있는이 평균이 경우, 더 나은 것입니다 (매개 변수를 취하지하는 ChangeSquareSpeed을 변경합니까 이 일을하는 방법?), 또는 내가 문법적으로 잘못된 것을하고 있습니까?
미리 감사드립니다.
그러나이 경우 squarespeed에 전달 된 객체를 벡터로 어떻게 사용합니까? ChangeSquareSpeed에서 Vector2 만 사용하고 싶습니다. 더 좋은 방법은 없을까요? – Xenoprimate
@ 모티크, 내 업데이트 참조. 당신이 Vector2의 배열이나 Vector2의 객체를 KeyEvent의 인수로 사용하기를 원한다면 정말로 말할 수 없습니다. –
음,이 방법이 적합 할 수 있습니다.하지만 대리자 eventmethod가 유연해야합니다. 이 예에서는 Vector2를 전달하는 데이 메서드를 사용하지만 호출 할 '이벤트'가 무엇인지에 따라 다른 것으로 전달할 수도 있습니다. – Xenoprimate