基于Java的GUI地图平移
这是我的第一篇帖子,所以如果需要任何其他信息,请让我知道。 我正在用JavaGUI做一个游戏,希望能有两个快速的问题。我目前可以在屏幕上绘制地图,并使用以下代码在地图周围平移: 私有类MoveMap实现MouseMotionListener{基于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) {
@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类中声明了计时器,我猜每次鼠标移动时都会产生一个新的计时器。现在它是全球性的,而且效果很好。再次感谢!