【发布时间】:2017-07-17 03:52:07
【问题描述】:
我正在创建一个游戏(在 Unity 中)。我希望输入处理与游戏逻辑分离,以便它可以跨平台。我有一个名为IInputHandler 的接口,可以在每个平台上以不同的方式实现。例如,
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。”
【问题讨论】:
-
你能展示一些关于这个问题的实际代码吗?您可以在接口中定义事件,然后根据需要完全使用它们
-
当然。也许我只是不熟悉语法,但是当我尝试将以下方法放入我的界面时编译器会抱怨:
event ForwardKeyPressed()。它说“找不到类型或命名空间ForwardKeyPressed”。 -
请使用代码和确切的错误消息编辑问题。很可能只是语法问题
-
您需要一些顶级代码来确定平台。在此代码中,您的按钮事件可以只是一个 if 语句来根据平台注册事件。
-
@jdweng 你误解了我的问题。我想知道如何在可以订阅的接口中编写方法。
标签: c# events interface delegates event-handling