上篇的代码表明Java可以完美操作键盘,鼠标。这个做按键精灵的基础。下面介绍一些基本概念和原则,方便后面对开发思路的了解。对于开发比较资深的大佬可以直接跳过本章。
为了简化,在开发过程中遵循了以下原则。
4. 尽量利用游戏中已有的功能。比如自动寻路,自己开发一个自动寻路太麻烦,违反了简单游戏的初衷。
5. 尽量使用键盘快捷键操作。鼠标操作依赖屏幕坐标信息,通用性比较差。换个分辨率,或者窗口挪了点位置,都会造成操作失败。
6. 尽量利用已有坐标去计算未知坐标;这还是考虑通用性
7. 尽量使用特定颜色去定位位置;颜色不随机器,分辨率,窗口位置改变而改变,通用性比较好。
快捷键 | 功能 |
---|---|
F9 | 包袱开关键 |
M | 自动寻路地图开关键 |
Ctrl+Alt+X | 自动挂机开关键 |
ESC | 关闭所有游戏内已打开窗口 |
Alt+R | 刷新包袱,可以让包袱的物品一个挨着一个排列 |
使用这些快捷键的方法,是在上篇基础功能上二次开发的,上代码:
package com.analog.games.mir2.tools;
import com.analog.tools.CommonUtil;
import com.sun.glass.events.KeyEvent;
public class Mir2Tools {
public static boolean GRID_WINDOW_OPEN = false;
public static boolean SEARCH_PATH_WINDOW_OPEN = false;
public static boolean AUTO_PLAY = false;
public static boolean WAIGUA_WINDOW_OPEN = false;
/**
* //关闭已存在窗口(内挂关不了)press ESC
*/
public static void closeAllWindows(){
CommonUtil.pressOneKey(KeyEvent.VK_ESCAPE);
GRID_WINDOW_OPEN = false;
SEARCH_PATH_WINDOW_OPEN = false;
}
/**
* 切换包袱 press F9
*/
public static void switchGrid(){
CommonUtil.pressOneKey(KeyEvent.VK_F9);
//切换包袱开关状态
GRID_WINDOW_OPEN = GRID_WINDOW_OPEN ? false:true;
}
/**
* 挂机开关键 press Ctrl+Alt+X
*/
public static void switchGuaji(){
int keys[] = new int[]{KeyEvent.VK_CONTROL, KeyEvent.VK_ALT, KeyEvent.VK_X};
CommonUtil.pressKeys(keys);
AUTO_PLAY = AUTO_PLAY ? false:true;
}
/**
* 人物意外停止,重新挂机 press Ctrl+Alt+X
*/
public static void switchGuaji(boolean guajiStatus) {
int keys[] = new int[]{KeyEvent.VK_CONTROL, KeyEvent.VK_ALT, KeyEvent.VK_X};
CommonUtil.pressKeys(keys);
AUTO_PLAY = guajiStatus;
}
/**
* 外挂开关键 press F12
*/
public static void switchWaigua(){
CommonUtil.pressOneKey(KeyEvent.VK_F12);
//切换包袱开关状态
WAIGUA_WINDOW_OPEN = WAIGUA_WINDOW_OPEN ? false:true;
}
/**
* 地图开关键 press TAB
*/
public static void pressTAB(){
CommonUtil.pressOneKey(KeyEvent.VK_TAB);
}
/**
* 寻路地图开关键 press M
*/
public static void switchFindPathMap(){
CommonUtil.pressOneKey(KeyEvent.VK_M);
SEARCH_PATH_WINDOW_OPEN = SEARCH_PATH_WINDOW_OPEN ? false:true;
}
/**
* 刷新包袱 press Alt+R
*/
public static void burdenFresh(){
int keys[] = new int[]{KeyEvent.VK_ALT, KeyEvent.VK_R};
CommonUtil.pressKeys(keys);
}
}
代码有一些方法是开始的时候使用,后来发现更好的方案,就放弃了,但是代码没删。比如打开寻路地图,原先是调用3次pressTAB()(游戏里的设定,按一次TAB是打开小地图,再按一次是打开全景小地图,再按一次打开寻路地图),后来发现了“M”键可以直接打开/关闭寻路地图。
以上内容,是开发按键精灵的基础,后面会有更细化的分析。。。