游戏-关于java如何实现按键监听动态绑定

问题描述

关于java如何实现按键监听动态绑定
 public void keyPressed(KeyEvent e) {  //按键键盘监听
        int key = e.getKeyCode();
        switch (key) {
        case KeyEvent.VK_R:
            tc.tanks.clear();
            tc.bullets.clear();
            tc.trees.clear();
            tc.otherWall.clear();
            tc.homeWall.clear();
            tc.metalWall.clear();
            tc.homeTank.setLive(false);
            if (tc.tanks.size() == 0) {
                for (int i = 0; i < 20; i++) {
                    if (i < 9)
                        tc.tanks.add(new Tank(150 + 70 * i, 40, false,
                                Direction.R, tc));
                    else if (i < 15)
                        tc.tanks.add(new Tank(700, 140 + 50 * (i -6), false,
                                Direction.D, tc));
                    else
                        tc.tanks.add(new Tank(10,  50 * (i - 12), false,
                                Direction.L, tc));
                }
            }

            tc.homeTank = new Tank(300, 560, true, Direction.STOP, tc);

            if (!tc.home.isLive())
                tc.home.setLive(true);
            new TankClient();
            break;
        case KeyEvent.VK_RIGHT: //坦克向右
            bR = true;
            break;

        case KeyEvent.VK_LEFT://坦克向左
            bL = true;
            break;

        case KeyEvent.VK_UP:  //坦克向上
            bU = true;
            break;

        case KeyEvent.VK_DOWN://坦克向下
            bD = true;
            break;
        }
        decideDirection();http://ask.csdn.net/#
    }

这是我写的键盘按下的监听方法,用于重置游戏和控制坦克行动方向。现在我想做个更改键位的功能,不知道各位大神什么方法能实现。

解决方案

基于JVM的Java静态与动态绑定实现机制
java中的动态绑定
java的动态绑定

解决方案二:

自己写个静态管理类;
类(A)里面如下部分示例(不考虑安全性):
public static int DOWN = KeyEvent.VK_DOWN;
public static int UP = KeyEvent.VK_UP;
....

然后你的类里面:
case A.DOWN:...
case A.UP :...

修改:
因为所以地方都有读写权限,所以可以如下:
A.DOWN = 修改后的键值;
....

这样就可以了。

如果需要安全,用private static,然后读写可见性放开给不同的类。

解决方案三:

Key类,包名你自己定,这个类没考虑安全性,因为可以更改,也没法定final,可以用同包去public
import static java.awt.event.KeyEvent.*;
public class Key {
/** 私有化构造 */
private Key(){}
public static int R = VK_R;
public static int UP = VK_UP;
public static int DOWN = VK_DOWN;
public static int RIGHT = VK_RIGHT;
public static int LEFT = VK_LEFT;

/**
 * 重置回原来的值
 */
public static void reset(){
    R = VK_R;
    UP = VK_UP;
    DOWN = VK_DOWN;
    RIGHT = VK_RIGHT;
    LEFT = VK_LEFT;
}

/**
 *
 * @param r       -- 自定义刷新初始化的键值
 * @param up      -- 自定义上的键值
 * @param right   -- 自定义右的键值
 * @param down    -- 自定义下的键值
 * @param left    -- 自定义左的键值
 */
public static void resetKey(int r, int up, int right, int down, int left){
    R = r;
    UP = up;
    RIGHT = right;
    DOWN = down;
    LEFT = left;
}

}

这个是你代码里面的改动:
public void keyPressed(KeyEvent e) { //按键键盘监听
int key = e.getKeyCode();
switch (key) {
case Key.R:

tc.tanks.clear();

tc.bullets.clear();
tc.trees.clear();
tc.otherWall.clear();
tc.homeWall.clear();
tc.metalWall.clear();
tc.homeTank.setLive(false);
if (tc.tanks.size() == 0) {

for (int i = 0; i < 20; i++) {
if (i < 9)

tc.tanks.add(new Tank(150 + 70 * i, 40, false,
Direction.R, tc));
else if (i < 15)
tc.tanks.add(new Tank(700, 140 + 50 * (i -6), false,
Direction.D, tc));
else
tc.tanks.add(new Tank(10, 50 * (i - 12), false,
Direction.L, tc));
}
}

        tc.homeTank = new Tank(300, 560, true, Direction.STOP, tc);

        if (!tc.home.isLive())
            tc.home.setLive(true);
        new TankClient();
        break;
    case Key.RIGHT: //坦克向右
        bR = true;
        break;

    case Key.LEFT://坦克向左
        bL = true;
        break;

    case Key.UP:  //坦克向上
        bU = true;
        break;

    case Key.DOWN://坦克向下
        bD = true;
        break;
    }
    decideDirection();http://ask.csdn.net/#
}

    然后就是你自定义键值的类(具体实现就不写了):
    直接将用户自定义好的键值放入方法Key.reset(int r, int up, int right, int down, int left)中,就改变了。
    不想用自定义了,可以调用Key.reset()方法
时间: 2025-01-24 13:44:59

游戏-关于java如何实现按键监听动态绑定的相关文章

java 鼠标和按键监听都注册时。鼠标拖曳会触发按键监听的Ctrl键是怎么回事?

问题描述 java 鼠标和按键监听都注册时.鼠标拖曳会触发按键监听的Ctrl键是怎么回事? 我写的一程序.添加了按键监听和鼠标监听,各执行一个功能.当我按住鼠标左或右键拖曳的时候,触发了按键监听那里的事件.于是我就在按键监听类里用System.out.print(e.getKeyCode),打印出来是0x11(ctrl的键码). 解决方案 你的问题不太清晰. 什么怎么回事?? 不知道你想获取啥信息 解决方案二: 按理说不会,看下是不是你启动程序的时候朝程序发了什么按键,完全用鼠标来启动你的程序.

java 标签组 鼠标监听

问题描述 java 标签组 鼠标监听 java标签组添加了鼠标监听,如何在鼠标点击时获得该标签的名字 解决方案 JLabel 不像按钮,要添加鼠标事件的话 用鼠标事件监听: JLabel jl = new JLabel(); jl.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent e) { // 处理鼠标点击 } public void mouseEntered(MouseEvent e) { //

java代码-java中对键盘监听是不是一定要用到组件

问题描述 java中对键盘监听是不是一定要用到组件 能不能不用组件能编写一段代码直接在某一个时刻对键盘进行监听,有没有具体的源代码 解决方案 document.body.onkeypress=function()//键盘点击事件 { var code = window.event.keyCode;---得到键盘点击号..一般都用回车13 abc.. 97 98 99... ...下面添加代码就行了 code==? {function(){}}.. }

java Gui编程 事件监听机制

1.     GUI编程引言     以前的学习当中,我们都使用的是命令交互方式:        例如:在DOS命令行中通过javac java命令启动程序.     软件的交互的方式:      1. 命令交互方式           图书管理系统     2. 图形交互方式     ava提供了专业的API用于开发图形用户界面     GUI--> Graphic  User   Interface      将要了解GUI API的框架结构,以及GUI组件以及组件之间的关系,容器和布局管理

求救高手~!!!java 有没有异常监听

问题描述 我同事写了一个java的程序由于水平有限有很多冲突的按键经常会有异常发生我想让它发生异常时给用户一个友好的提示以免用户还在继续操作最后徒劳所以请问java里有没有一个能捕捉异常发生的方法只要有异常就弹出个提示框不要说trycatch他的代码太多了太乱了最好有个类似监听的东西这样一旦触发就能提示用户请高手指点下 解决方案

java基础-GUI的监听范围,主要是不知道放哪里

问题描述 GUI的监听范围,主要是不知道放哪里 如何给鼠标拖动的监听加一个方位?我用if没用.我是新手,希望大神说的仔细一点.我们现在在做吃鱼这个游戏

求助 java中的鼠标监听

问题描述 求教怎样实现:鼠标第一步,移动到一个按钮上第二步,等一段时间t第三步,单击按钮如果第一步和第三步的时间差t小于1秒,则执行事件一,否则执行事件二.不胜感谢! 解决方案 解决方案二:用swing还是awt还是swt?貌似做法不同的解决方案三:百度了一下mouseEntered()记录时间和单击的时间进行比较单击如果用swing是JButton.addactionListener(A类)A类implementsActionListener(一般前面还要加extendsJPanel)A类:@

java中按钮监听以及鼠标监听的使用

我们在进行java的GUI开发的时候,按钮以及鼠标监听的使用无疑是相当最要的,而如何巧妙的运用这些监听器,对今后的开发更是有很大的帮助,下面将分别介绍. 实现按钮监听的方法: 在java.awt.event下面有一个ActionListener的类,它是一个用于接收操作事件的侦听器接口,对处理操作事件感兴趣的就可以去使用这个接口. 首先我们需要写一个类去实现这个接口,然后对我们的JButton对象添加按钮响应,最后再给这个按钮添加监听器,具体代码如下: JButton bu=new JButto

JAVA键盘监听,错误在哪里

问题描述 JAVA键盘监听,错误在哪里 解决方案 java 键盘监听java 键盘监听Java:键盘全局监听 解决方案二: http://zhidao.baidu.com/question/577201357.html?qbl=relate_question_0 解决方案三: 编译问题,你这个方法调用参数类型是错误的,键盘监听事件的参数是addKeyListener的参数必须是实现KeyListener这个接口的类. 你的mb类型定义的是JPanel,所以会报编译错误.你需要定义一个类实现Key