订阅C#中的界面事件

问题描述:

我正在创建一个游戏(在Unity中)。我希望将输入处理从游戏逻辑中分离出来,以便它能够跨平台。我有一个名为IInputHandler的接口,可以在不同的平台上以不同的方式实现。例如,订阅C#中的界面事件

public class AndroidInputHandler : IInputHandler 

public class PcInputHandler : IInputHandler 

我想这个接口,这样我可以做这样的事情的原因是:

public class PlayerController { 

    private IInputHandler _inputHandler; 
    private Player _myPlayer; 
    // ... 
    _inputHandler.ForwardKeyPressed += _myPlayer.MoveForward(); 

正如你所看到的,我想它的接口我可以订阅的方法,以便任何时候按下“向前移动”键,无论是PC上的“W”键还是Android屏幕上的轻按,我的Player都会向前移动。我曾尝试在我的IInputHandler界面中使用delegates,但代表和界面似乎不能很好地一起玩。我怎样才能达到我想要做的?

编辑:我已经试过什么:

public interface IInputHandler { 

    event ForwardKeyPressed(); 

错误消息:“类型或命名空间ForwardKeyPressed无法找到”

+0

你能告诉有关问题的一些实际的代码?您可以在界面中定义事件,然后按照您的要求使用它们。 –

+0

当然。也许我只是对语法不熟悉,但是当我尝试在接口中使用下面的方法时,编译器会抱怨:'event ForwardKeyPressed()'。它说“找不到类型或命名空间'ForwardKeyPressed'”。 – Alex

+0

请编辑与代码和确切的错误信息的问题。这可能只是一个语法问题 –

您必须声明事件的类型。

举个例子,

public interface IInputHandler 
{ 
    event EventHandler<ForwardKeyPressedEventArgs> ForwardKeyPressed; 
} 
+0

你的代码示例也不会编译。 –

+0

为每个事件添加一个类型看起来过多。在这种情况下,我将不得不声明'LeftKeyPressedEventArgs','JumpKeyPressedEventArgs','Ability1KeyPressedEventsArgs'等。有没有更简单的方法来做到这一点? – Alex

+0

@Alex你可以使用'EventHandler'。或者您可以为任何类型的按键事件声明一个名为“KeyPressedEventArgs”的类。随你便。你的基本问题归结为语法错误。 –