Java模拟按键精灵(二)-基础概念介绍

  上篇的代码表明Java可以完美操作键盘,鼠标。这个做按键精灵的基础。下面介绍一些基本概念和原则,方便后面对开发思路的了解。对于开发比较资深的大佬可以直接跳过本章。

屏幕坐标系

  1. 屏幕坐标系原点O(0,0)在屏幕左上角;通常用x表示横坐标,y表示纵坐标
  2. 屏幕坐标范围和显示器分比率有关;比如分比率是1366X768像素,表示横坐标x范围是[0, 1366],纵坐标是[0, 768];负数坐标表示在屏幕外面
  3. 屏幕坐标系和游戏地图坐标,没有直接关联关系;当我们移动鼠标,是按屏幕坐标计算的。想要把鼠标移动到游戏地图坐标的某个位置,需要把游戏地图坐标转化为屏幕坐标。

开发过程中的一些原则

  为了简化,在开发过程中遵循了以下原则。
4. 尽量利用游戏中已有的功能。比如自动寻路,自己开发一个自动寻路太麻烦,违反了简单游戏的初衷。
5. 尽量使用键盘快捷键操作。鼠标操作依赖屏幕坐标信息,通用性比较差。换个分辨率,或者窗口挪了点位置,都会造成操作失败。
6. 尽量利用已有坐标去计算未知坐标;这还是考虑通用性
7. 尽量使用特定颜色去定位位置;颜色不随机器,分辨率,窗口位置改变而改变,通用性比较好。

游戏功能介绍

  1. 开发过程使用的游戏内置功能:自动挂机自动寻路
  2. 开发过程用到的核心游戏快捷键
快捷键功能
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”键可以直接打开/关闭寻路地图。
  以上内容,是开发按键精灵的基础,后面会有更细化的分析。。。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值