码迷,mamicode.com
首页 > 其他好文 > 详细

EL比赛技术日志(5)

时间:2015-02-04 12:45:42      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

EL比赛技术日志(5)

标签:

原文地址:http://www.cnblogs.com/haoxin/p/4271914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!