我正在制作一款吸引游戏的小游戏。在某个特定事件中,我希望玩家在发生这种情况时失去对角色的控制权。我在另一个类中使用键适配器并将其添加到构造函数中,如下所示:
addKeyListener(new GetKeyStroke(this));
我的代码游戏看起来像这样(它在paint方法中):
if (gameOver) {
g.setFont(pauseFont);
g.setColor(Color.WHITE);
g.drawString("Game Over!", screenSize.width / 2 - 110, screenSize.height / 5);
}
我尝试过使用
removeKeyListener(new GetKeyStroke(this));
但据我所知,这创造了一个新的对象,这就是为什么它不起作用。
非常感谢任何帮助
答案 0 :(得分:2)
您需要为您添加的GetKeyStroke
提供某种参考变量。
private GetKeyStroke keyListener = new GetKeyStroke(this);
...
addKeyListener(keyListener);
如果您想从其他类访问它,您可能还希望拥有getter
,例如
public class One {
private GetKeyStroke keyListener;
public One() {
keyListener = new GetKeyStroke(this);
addKeyListener(keyListener);
}
public GetKeyStroke getKeyListener(){
return keyListener;
}
}
然后,您可以将One
作为Two
的引用传递,并使用getKeyListener
方法获取对同一实例的引用GetKeyStoke
public class Two {
private One one;
private GetKeyStroke keyListener;
public Two( final One one ) {
this.one = one;
keyListener = one.getKeyListener();
}
public someMehod() {
one.removeKeyListener(keyListener);
}
}
也许更合适的设计会使用interface
。可以看到here的一个示例,甚至更高级的MVC Design主题可能是您未来感兴趣的。
旁注:
KeyListener
的焦点问题。 Oracle实际上建议使用密钥绑定来使用KeyListener
进行特定的关键反应。答案 1 :(得分:-1)
你可以创建一个对象作为你的keylistener
Object a = new GetKeyStroke();
然后你可以添加和删除它。
button.addKeyListener((KeyListener) a);
button.removeKeyListener((KeyListener) a);
注意我不是专家,我知道使用Object并不好,但我无法弄清楚我应该使用什么