首页 > 代码库 > EL比赛技术日志(5)

EL比赛技术日志(5)

2012-04-12 15:45:51

==============

好久没写了,这段时间在准备期中的高数考试技术分享,加油!。今天抽空完成了游戏的一个小功能——实现游戏内窗口的拖动,比如你打开一个物品栏,然后用鼠标把它拖到右上角。很简单的功能,不过能大大增加玩家的游戏体验。方法同样自己想的,原创!

流程:  1.鼠标在窗口区域按下,isDrag = true,即拖动方法drag()被激活。

          2.计算点击坐标和窗口绘制基点的相对距离,distanceX和distanceY。

          3.检测鼠标每一时刻的坐标mouseX和mouseY,然后计算重绘的基座标dx,dy。

             dx = mouseX - distanceX;     dy = mouseY - distanceY;

          4.不断重绘。检测当鼠标松开时,isDrag = false。拖动方法drag()被关闭。

简陋的实现代码(未指定点击区域即全屏点击有效.(注:MouseMoveManager为鼠标实时坐标管理类)):

 1 public class NjuqBox { 2 /** 3 * 各种box……,要实现窗体的拖动和里面的事件响应,计划人物状态窗口,游戏system窗口,物品窗口(实现物品的使用) 4 *  5 * @author HX 6 */ 7   private int mouseX, mouseY; 8   private int distanceX, distanceY; 9   private int dx = 40, dy = 40;10   private boolean isDrag = false;11   private Image itemImg;12 13   public NjuqBox() {14     loadImage();15   }16 17   public void loadImage() {18     try {19       itemImg = ImageIO.read(new File(System.getProperty("user.dir") + "/res/image/box/item.png"));21     } catch (IOException e) {22     // TODO Auto-generated catch block23       e.printStackTrace();24     }25    }26 27   // 实现鼠标拖动窗口,传入鼠标与窗体起画点的相对距离dx,dy28   public void drag() {29     dx = MouseMoveManager.MouseMoveX() - distanceX;30     dy = MouseMoveManager.MouseMoveY() - distanceY;31   }32 33   //绘制34   public void draw(Graphics g) {35     if (isDrag) {36       drag();37     }38     g.drawImage(itemImg, dx, dy, null);39   }40 41   public void mousePressed(MouseEvent e) {42     isDrag = true;43     mouseX = e.getX();44     mouseY = e.getY();45     distanceX = mouseX - dx;46     distanceY = mouseY - dy;48   }49 50   //鼠标释放51   public void mouseReleased(MouseEvent e) {52     isDrag = false;53   }54 }

 

EL比赛技术日志(5)