首页 > 代码库 > 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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。