【发布时间】:2017-03-30 19:21:15
【问题描述】:
我有这个问题:我正在构建一个游戏。我正在尝试检查missionA是否完成,传递给MissionB。
我有一个 StageClass(扩展 JFrame),这个:
public class Stage extends JFrame {
Scene missionOne;
public Stage(){
//Code
missionOne=new Scene();
add(missionOne);
addWindowListener(new java.awt.event.WindowAdapter(){
public void windowActivated(java.awt.event.WindowEvent evt){
checkMissionState();
}
});
}
private void checkMissionState(){
if(missionOne.complete()){
//ChangeMission
}
}
}
在场景类中:
public class Scene extends JPanel implements ActionListener,KeyListener {
//Allcode
public boolean complete(){
boolean sw=false;
//Verify a list of conditions
return sw;
}
任务完成后,我没有执行 checkMissionState()。原因是这一刻的焦点是场景。我试过windowLostFocus,windowDeactivated,也没有执行。
我可以得到一个解决方案,在屏幕上从 complete() 发送 JOptionPane 消息
public class Scene extends JPanel implements ActionListener,KeyListener {
//Allcode
public boolean complete(){
boolean sw=false;
//Verify a list of conditions
if(sw) JOptionPane.showMessageDialog(null,"Mission is complete");
return sw;
}
有效。但这退出了游戏中的 Jugability。
我正在 JFrame 中搜索一种执行 checkMissionState() 的形式,而不发送 JOptionPane 消息。
怎么可能?
【问题讨论】:
-
为什么激活一个窗口会改变游戏的状态?如果任务在窗口失去焦点之前完成,那么如果窗口重新获得焦点,它仍然会完成。所以你的游戏逻辑需要检查任务何时完成,而不是 WindowListener。
-
当我添加场景任务One focus Lost 我正在尝试使用 windowActivated 因为有十 (10) 个任务,必须从 JFrame 添加或删除的 SceneClass 的十个对象
标签: java events jframe jpanel windowlistener