标签:
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 }
标签:
原文地址:http://www.cnblogs.com/haoxin/p/4271914.html