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 block
23       e.printStackTrace();
24     }
25    }
26 
27   // 实现鼠标拖动窗口,传入鼠标与窗体起画点的相对距离dx,dy
28   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 }

 

posted @ 2015-02-04 11:22  郝鑫  阅读(111)  评论(0)    收藏  举报