Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Java的GUI地图平移_Java_Swing_Animation_Awt_Jscrollpane - Fatal编程技术网

基于Java的GUI地图平移

基于Java的GUI地图平移,java,swing,animation,awt,jscrollpane,Java,Swing,Animation,Awt,Jscrollpane,这是我的第一篇帖子,所以如果需要任何其他信息,请让我知道。 我正在用JavaGUI做一个游戏,希望能有两个快速的问题。我目前可以在屏幕上绘制地图,并使用以下代码在地图周围平移: 私有类MoveMap实现MouseMotionListener{ @Override public void mouseDragged(MouseEvent e) { } @Override public void mouseMoved(MouseEvent e) {

这是我的第一篇帖子,所以如果需要任何其他信息,请让我知道。 我正在用JavaGUI做一个游戏,希望能有两个快速的问题。我目前可以在屏幕上绘制地图,并使用以下代码在地图周围平移: 私有类MoveMap实现MouseMotionListener{

    @Override
    public void mouseDragged(MouseEvent e) {

    }

    @Override
    public void mouseMoved(MouseEvent e) {

        if(e.getX() > swidth-30){
            if(xmod+(columns*30) > swidth){
                xmod-=30;
                repaint();
            }
        }
        else if(e.getX() < 30){
            if(xmod < 0){
                xmod+=30;
                repaint();
            }
        }
        else if(e.getY() > sheight-30){
            if(ymod+(rows*30) > sheight){
                ymod-=30;
                repaint();
            }
        }
        else if(e.getY() < 30){
            if(ymod < 0){
                ymod+=30;
                repaint();
            }
        }
        else{

        }

    }

}
@覆盖
公共无效鼠标标记(鼠标事件e){
}
@凌驾
public void mouseMoved(MouseEvent e){
如果(例如getX()>swidth-30){
如果(xmod+(列*30)>swidth){
xmod-=30;
重新油漆();
}
}
else if(如getX()<30){
如果(xmod<0){
xmod+=30;
重新油漆();
}
}
否则如果(e.getY()>sheigh-30){
如果(ymod+(行*30)>高度){
ymod-=30;
重新油漆();
}
}
否则如果(如getY()<30){
if(ymod<0){
ymod+=30;
重新油漆();
}
}
否则{
}
}
}

唯一的问题是鼠标必须在屏幕边缘不断移动才能不断平移。我的问题是,是否有一种方法可以让鼠标位于屏幕边缘,并在更新图形时不断平移?我的第二个问题是,这是否也适用于角色移动?我想也许一个线程将是一个可能的解决方案,但我不熟悉使用它们。谢谢大家!

我可以想出两种方法来实现这一点

你可以

启动
javax.swing.Timer
,当鼠标在屏幕边缘的给定距离内输入时,该计时器将根据需要更新x/y位置并重新绘制屏幕。很明显,当鼠标向后移动时,您会停止计时器;)

你可以


使用后台
线程
监视鼠标位置,当鼠标进入“触发”区域时,将更新x/y值并触发重新绘制,确保将调用重新同步到EDT;)

我可以想出两种方法来实现这一点

你可以

启动
javax.swing.Timer
,当鼠标在屏幕边缘的给定距离内输入时,该计时器将根据需要更新x/y位置并重新绘制屏幕。很明显,当鼠标向后移动时,您会停止计时器;)

你可以


使用后台
线程
监视鼠标位置,当鼠标进入“触发”区域时,将更新x/y值并触发重新绘制,确保将调用重新同步到EDT;)

首先感谢您的快速响应!我只是对计时器或后台线程如何解决这个问题有点困惑。我想保留MouseMotionListener吗?好的,计时器可以工作,但当鼠标离开边缘时,会继续移动贴图。我有
“Timer.stop()我检测鼠标是否离开,但它似乎忽略了它。有什么建议吗?我现在不在电脑前,但听起来你没有使用相同/单一的时间参考。谢谢!我在我的MouseMotionListener类中声明了计时器,我猜每次鼠标移动时都会产生一个新的计时器。现在它是全球性的,而且效果很好。再次感谢!首先感谢您的快速响应!我只是对计时器或后台线程如何解决这个问题有点困惑。我想保留MouseMotionListener吗?好的,计时器可以工作,但当鼠标离开边缘时,会继续移动贴图。我有
“Timer.stop()我检测鼠标是否离开,但它似乎忽略了它。有什么建议吗?我现在不在电脑前,但听起来你没有使用相同/单一的时间参考。谢谢!我在我的MouseMotionListener类中声明了计时器,我猜每次鼠标移动时都会产生一个新的计时器。现在它是全球性的,而且效果很好。再次感谢!