暂时禁用窗口的鼠标输入

时间:2013-06-29 16:42:18

标签: java swing io awt mouselistener

我最近开始用Java编程,并决定开始制作游戏,以此来向自己展示一些新的概念和方法。游戏是一个简单的2轮回合制战略游戏(或者它将会是),我一直在努力解决的一个主要问题如下:

我希望所有玩家同时分配他们的订单,当他们完成分配他们的订单时,他们提交/确认/提交他们的订单,但是我让游戏在功能上接受订单,并且有一个非常简单的“提交”命令到位,我似乎无法了解如何在游戏移动玩家的单位时暂时禁用用户输入。

我认为问题可能在以下代码的某处,如果代码没有以正确的格式出现,我会在高级中道歉(我之前没有发过问题,但我试过了):

if(Canvas.keyboardKeyState(KeyEvent.VK_SPACE)){
    isUnderway=true;
    timeStarted=System.currentTimeMillis();
}
if (isUnderway&&System.currentTimeMillis()>=timeStarted + turnTimeMillis){
    isUnderway=false;
}
if(Canvas.mouseButtonState(MouseEvent.BUTTON1)){
    targetlocationy=((mousePosition.y-25)/50)*50;
    targetlocationx=((mousePosition.x-25)/50)*50;            
}
totargetx = targetlocationx - x;
totargety = targetlocationy - y;
dist = Math.hypot( totargetx, totargety );

if(isUnderway){
    if ( dist <= 5 ){
        x = targetlocationx;
        y = targetlocationy;
    }
    else{
        x += totargetx * ( 2 / dist );
        y += totargety * ( 2 / dist );
    }
}

我试图改变用于设置targetlocation [x,y]的if()条件,将其转换为:

if(Canvas.mouseButtonState(MouseEvent.BUTTON1)&&isUnderway=false)

以及其中的几种变体。但是那个代码似乎不可操作,我猜它会在targetlocation[x/y]时转储isUnderway=true,将它们重置为默认值(该片段的当前位置),但看到它不会转储{{1当没有按下targetlocation[x/y]时,解释没有多大意义。

目前,此代码按预期运行,除了能够在提交订单后更改targetlocation值。

编辑:此方法(及其所在的类)使用AWT作为GUI。

1 个答案:

答案 0 :(得分:2)

在SWING中,这正是glass panes的用途。