我正在为一个大学项目开发一个简单的2D游戏引擎,我们正在试图弄清楚我们如何为应用程序员提供一个方法,他可以在其中发送一个密钥代码,成员和成员方法,以便他们将特定键绑定到特定方法。
我们有一个Game
类,其中包含了此时相关的大部分内容,当我们在C ++中执行类似的项目时,我们能够在Game类中创建一个方法{{1和keycode作为参数(并且std函数包含成员和成员函数)然后只将它们存储在地图中,每当按下正确的键时,我们只调用std::function
执行正确的方法正确的对象。
我们一直在搜索java中类似的解决方案,我们唯一能找到的就是使用lambda表达式,但我们还没有设法找到任何对我们的示例有帮助的体面指南。问题基本上是我们如何将特定键绑定到特定成员和函数,如果结构如下所示:
Game.java类包含一个玩家对象,我们希望能够在Main类中调用一个像这样工作的函数
std::function
然后游戏类将这些绑定存储在某种结构中,在这种结构中可以迭代,当按下向上时,将在播放器中调用 game.bindKey(KeyEvent.VK_UP, player,jump())
方法。
我们如何在Java中执行此操作,是否可以更轻松地将键绑定到方法而不使用lambdas?
答案 0 :(得分:0)
从您所说的看来,访客模式似乎是查看问题的有用方式,http://www.tutorialspoint.com/design_pattern/visitor_pattern.htm
具体来说,我首先接受一个接口,它有一个"动作"方法来完成你想要的东西,类似于这样的东西:
public interface GameKeyBoardAction {
public void executeAction(Context cx)
}
public class JumpAction implements GameKeyBoardAction {
public void executeAction(Context cx) {
// ... do what's needed for the jump action
}
}
然后你可以在某处调用它:
game.bindKey(KeyEvent.VK_UP, player, new JumpAction())
我还建议使用Map
实现来查找操作,可以是简单的HashMap,也可以来自java.util.concurrent.
或类似的库