订阅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
无法找到”
您必须声明事件的类型。
举个例子,
public interface IInputHandler
{
event EventHandler<ForwardKeyPressedEventArgs> ForwardKeyPressed;
}
你的代码示例也不会编译。 –
为每个事件添加一个类型看起来过多。在这种情况下,我将不得不声明'LeftKeyPressedEventArgs','JumpKeyPressedEventArgs','Ability1KeyPressedEventsArgs'等。有没有更简单的方法来做到这一点? – Alex
@Alex你可以使用'EventHandler'。或者您可以为任何类型的按键事件声明一个名为“KeyPressedEventArgs”的类。随你便。你的基本问题归结为语法错误。 –
你能告诉有关问题的一些实际的代码?您可以在界面中定义事件,然后按照您的要求使用它们。 –
当然。也许我只是对语法不熟悉,但是当我尝试在接口中使用下面的方法时,编译器会抱怨:'event ForwardKeyPressed()'。它说“找不到类型或命名空间'ForwardKeyPressed'”。 – Alex
请编辑与代码和确切的错误信息的问题。这可能只是一个语法问题 –