亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inputmanager.java

?? 一個類似超級瑪麗的Java游戲 來自《Developing Games in Java》的一個游戲編程實例
?? JAVA
字號:
package com.brackeen.javagamebook.input;

import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.ArrayList;
import javax.swing.SwingUtilities;

/**
    The InputManager manages input of key and mouse events.
    Events are mapped to GameActions.
	Download by http://www.codefans.net
*/
public class InputManager implements KeyListener, MouseListener,
    MouseMotionListener, MouseWheelListener
{
    /**
        An invisible cursor.
    */
    public static final Cursor INVISIBLE_CURSOR =
        Toolkit.getDefaultToolkit().createCustomCursor(
            Toolkit.getDefaultToolkit().getImage(""),
            new Point(0,0),
            "invisible");

    // mouse codes
    public static final int MOUSE_MOVE_LEFT = 0;
    public static final int MOUSE_MOVE_RIGHT = 1;
    public static final int MOUSE_MOVE_UP = 2;
    public static final int MOUSE_MOVE_DOWN = 3;
    public static final int MOUSE_WHEEL_UP = 4;
    public static final int MOUSE_WHEEL_DOWN = 5;
    public static final int MOUSE_BUTTON_1 = 6;
    public static final int MOUSE_BUTTON_2 = 7;
    public static final int MOUSE_BUTTON_3 = 8;

    private static final int NUM_MOUSE_CODES = 9;

    // key codes are defined in java.awt.KeyEvent.
    // most of the codes (except for some rare ones like
    // "alt graph") are less than 600.
    private static final int NUM_KEY_CODES = 600;

    private GameAction[] keyActions =
        new GameAction[NUM_KEY_CODES];
    private GameAction[] mouseActions =
        new GameAction[NUM_MOUSE_CODES];

    private Point mouseLocation;
    private Point centerLocation;
    private Component comp;
    private Robot robot;
    private boolean isRecentering;

    /**
        Creates a new InputManager that listens to input from the
        specified component.
    */
    public InputManager(Component comp) {
        this.comp = comp;
        mouseLocation = new Point();
        centerLocation = new Point();

        // register key and mouse listeners
        comp.addKeyListener(this);
        comp.addMouseListener(this);
        comp.addMouseMotionListener(this);
        comp.addMouseWheelListener(this);

        // allow input of the TAB key and other keys normally
        // used for focus traversal
        comp.setFocusTraversalKeysEnabled(false);
    }


    /**
        Sets the cursor on this InputManager's input component.
    */
    public void setCursor(Cursor cursor) {
        comp.setCursor(cursor);
    }


    /**
        Sets whether realtive mouse mode is on or not. For
        relative mouse mode, the mouse is "locked" in the center
        of the screen, and only the changed in mouse movement
        is measured. In normal mode, the mouse is free to move
        about the screen.
    */
    public void setRelativeMouseMode(boolean mode) {
        if (mode == isRelativeMouseMode()) {
            return;
        }

        if (mode) {
            try {
                robot = new Robot();
                recenterMouse();
            }
            catch (AWTException ex) {
                // couldn't create robot!
                robot = null;
            }
        }
        else {
            robot = null;
        }
    }


    /**
        Returns whether or not relative mouse mode is on.
    */
    public boolean isRelativeMouseMode() {
        return (robot != null);
    }


    /**
        Maps a GameAction to a specific key. The key codes are
        defined in java.awt.KeyEvent. If the key already has
        a GameAction mapped to it, the new GameAction overwrites
        it.
    */
    public void mapToKey(GameAction gameAction, int keyCode) {
        keyActions[keyCode] = gameAction;
    }


    /**
        Maps a GameAction to a specific mouse action. The mouse
        codes are defined herer in InputManager (MOUSE_MOVE_LEFT,
        MOUSE_BUTTON_1, etc). If the mouse action already has
        a GameAction mapped to it, the new GameAction overwrites
        it.
    */
    public void mapToMouse(GameAction gameAction,
        int mouseCode)
    {
        mouseActions[mouseCode] = gameAction;
    }


    /**
        Clears all mapped keys and mouse actions to this
        GameAction.
    */
    public void clearMap(GameAction gameAction) {
        for (int i=0; i<keyActions.length; i++) {
            if (keyActions[i] == gameAction) {
                keyActions[i] = null;
            }
        }

        for (int i=0; i<mouseActions.length; i++) {
            if (mouseActions[i] == gameAction) {
                mouseActions[i] = null;
            }
        }

        gameAction.reset();
    }


    /**
        Gets a List of names of the keys and mouse actions mapped
        to this GameAction. Each entry in the List is a String.
    */
    public List getMaps(GameAction gameCode) {
        ArrayList list = new ArrayList();

        for (int i=0; i<keyActions.length; i++) {
            if (keyActions[i] == gameCode) {
                list.add(getKeyName(i));
            }
        }

        for (int i=0; i<mouseActions.length; i++) {
            if (mouseActions[i] == gameCode) {
                list.add(getMouseName(i));
            }
        }
        return list;
    }


    /**
        Resets all GameActions so they appear like they haven't
        been pressed.
    */
    public void resetAllGameActions() {
        for (int i=0; i<keyActions.length; i++) {
            if (keyActions[i] != null) {
                keyActions[i].reset();
            }
        }

        for (int i=0; i<mouseActions.length; i++) {
            if (mouseActions[i] != null) {
                mouseActions[i].reset();
            }
        }
    }


    /**
        Gets the name of a key code.
    */
    public static String getKeyName(int keyCode) {
        return KeyEvent.getKeyText(keyCode);
    }


    /**
        Gets the name of a mouse code.
    */
    public static String getMouseName(int mouseCode) {
        switch (mouseCode) {
            case MOUSE_MOVE_LEFT: return "Mouse Left";
            case MOUSE_MOVE_RIGHT: return "Mouse Right";
            case MOUSE_MOVE_UP: return "Mouse Up";
            case MOUSE_MOVE_DOWN: return "Mouse Down";
            case MOUSE_WHEEL_UP: return "Mouse Wheel Up";
            case MOUSE_WHEEL_DOWN: return "Mouse Wheel Down";
            case MOUSE_BUTTON_1: return "Mouse Button 1";
            case MOUSE_BUTTON_2: return "Mouse Button 2";
            case MOUSE_BUTTON_3: return "Mouse Button 3";
            default: return "Unknown mouse code " + mouseCode;
        }
    }


    /**
        Gets the x position of the mouse.
    */
    public int getMouseX() {
        return mouseLocation.x;
    }


    /**
        Gets the y position of the mouse.
    */
    public int getMouseY() {
        return mouseLocation.y;
    }


    /**
        Uses the Robot class to try to postion the mouse in the
        center of the screen.
        <p>Note that use of the Robot class may not be available
        on all platforms.
    */
    private synchronized void recenterMouse() {
        if (robot != null && comp.isShowing()) {
            centerLocation.x = comp.getWidth() / 2;
            centerLocation.y = comp.getHeight() / 2;
            SwingUtilities.convertPointToScreen(centerLocation,
                comp);
            isRecentering = true;
            robot.mouseMove(centerLocation.x, centerLocation.y);
        }
    }


    private GameAction getKeyAction(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if (keyCode < keyActions.length) {
            return keyActions[keyCode];
        }
        else {
            return null;
        }
    }

    /**
        Gets the mouse code for the button specified in this
        MouseEvent.
    */
    public static int getMouseButtonCode(MouseEvent e) {
         switch (e.getButton()) {
            case MouseEvent.BUTTON1:
                return MOUSE_BUTTON_1;
            case MouseEvent.BUTTON2:
                return MOUSE_BUTTON_2;
            case MouseEvent.BUTTON3:
                return MOUSE_BUTTON_3;
            default:
                return -1;
        }
    }


    private GameAction getMouseButtonAction(MouseEvent e) {
        int mouseCode = getMouseButtonCode(e);
        if (mouseCode != -1) {
             return mouseActions[mouseCode];
        }
        else {
             return null;
        }
    }


    // from the KeyListener interface
    public void keyPressed(KeyEvent e) {
        GameAction gameAction = getKeyAction(e);
        if (gameAction != null) {
            gameAction.press();
        }
        // make sure the key isn't processed for anything else
        e.consume();
    }


    // from the KeyListener interface
    public void keyReleased(KeyEvent e) {
        GameAction gameAction = getKeyAction(e);
        if (gameAction != null) {
            gameAction.release();
        }
        // make sure the key isn't processed for anything else
        e.consume();
    }


    // from the KeyListener interface
    public void keyTyped(KeyEvent e) {
        // make sure the key isn't processed for anything else
        e.consume();
    }


    // from the MouseListener interface
    public void mousePressed(MouseEvent e) {
        GameAction gameAction = getMouseButtonAction(e);
        if (gameAction != null) {
            gameAction.press();
        }
    }


    // from the MouseListener interface
    public void mouseReleased(MouseEvent e) {
        GameAction gameAction = getMouseButtonAction(e);
        if (gameAction != null) {
            gameAction.release();
        }
    }


    // from the MouseListener interface
    public void mouseClicked(MouseEvent e) {
        // do nothing
    }


    // from the MouseListener interface
    public void mouseEntered(MouseEvent e) {
        mouseMoved(e);
    }


    // from the MouseListener interface
    public void mouseExited(MouseEvent e) {
        mouseMoved(e);
    }


    // from the MouseMotionListener interface
    public void mouseDragged(MouseEvent e) {
        mouseMoved(e);
    }


    // from the MouseMotionListener interface
    public synchronized void mouseMoved(MouseEvent e) {
        // this event is from re-centering the mouse - ignore it
        if (isRecentering &&
            centerLocation.x == e.getX() &&
            centerLocation.y == e.getY())
        {
            isRecentering = false;
        }
        else {
            int dx = e.getX() - mouseLocation.x;
            int dy = e.getY() - mouseLocation.y;
            mouseHelper(MOUSE_MOVE_LEFT, MOUSE_MOVE_RIGHT, dx);
            mouseHelper(MOUSE_MOVE_UP, MOUSE_MOVE_DOWN, dy);

            if (isRelativeMouseMode()) {
                recenterMouse();
            }
        }

        mouseLocation.x = e.getX();
        mouseLocation.y = e.getY();

    }


    // from the MouseWheelListener interface
    public void mouseWheelMoved(MouseWheelEvent e) {
        mouseHelper(MOUSE_WHEEL_UP, MOUSE_WHEEL_DOWN,
            e.getWheelRotation());
    }

    private void mouseHelper(int codeNeg, int codePos,
        int amount)
    {
        GameAction gameAction;
        if (amount < 0) {
            gameAction = mouseActions[codeNeg];
        }
        else {
            gameAction = mouseActions[codePos];
        }
        if (gameAction != null) {
            gameAction.press(Math.abs(amount));
            gameAction.release();
        }
    }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久亚洲欧洲日产国码αv| 色老汉一区二区三区| 欧美视频一区二区三区四区| 一区二区三区在线视频观看| 在线观看一区不卡| 亚洲一区在线视频| 欧美精选在线播放| 美脚の诱脚舐め脚责91| 精品盗摄一区二区三区| 国产精品18久久久久久久久 | 中文在线一区二区| 国产一区激情在线| 国产精品久久久久影院亚瑟| 91视视频在线直接观看在线看网页在线看 | 国产日本欧洲亚洲| 粉嫩一区二区三区性色av| 国产精品美女久久久久av爽李琼 | 91精品国产日韩91久久久久久| 欧美韩国日本综合| 91视频观看视频| 亚洲bdsm女犯bdsm网站| 精品国产乱子伦一区| 成人精品国产免费网站| 亚洲成人黄色影院| 国产欧美一区二区三区网站 | 亚洲激情一二三区| 欧美色窝79yyyycom| 久久99精品久久久久婷婷| 国产精品国产自产拍高清av王其| 国产精品中文有码| 一区二区三区不卡视频| 精品国产麻豆免费人成网站| 91污片在线观看| 免费久久99精品国产| 国产精品成人网| 欧美一级视频精品观看| 97超碰欧美中文字幕| 老司机精品视频在线| 国产精品进线69影院| 日韩亚洲欧美综合| 99久久精品久久久久久清纯| 男女视频一区二区| 一区二区三区.www| 国产精品毛片大码女人| 日韩视频不卡中文| 欧美在线观看你懂的| 粉嫩一区二区三区性色av| 免费成人美女在线观看| 一区二区三区中文免费| 中文字幕免费不卡在线| 日韩一级成人av| 欧美视频一区在线| 一本色道久久综合狠狠躁的推荐 | 色综合天天做天天爱| 日本三级亚洲精品| 一区二区三区在线免费播放| 国产欧美一区二区在线观看| 日韩视频免费观看高清完整版 | 久久奇米777| 欧美精品一二三| 3atv一区二区三区| 国产a区久久久| 极品少妇一区二区三区精品视频 | 欧美影院一区二区| 北条麻妃一区二区三区| 国产综合色产在线精品| 无码av免费一区二区三区试看| 欧美日本在线观看| 91极品视觉盛宴| 91理论电影在线观看| heyzo一本久久综合| 国产一二三精品| 黑人巨大精品欧美黑白配亚洲| 国产精品日韩精品欧美在线| 久久精品欧美日韩精品| 欧美成人官网二区| 欧美一区二区三区系列电影| 欧美精选午夜久久久乱码6080| 理论电影国产精品| 免费人成精品欧美精品| 日产国产欧美视频一区精品| 日韩精品视频网| 蜜桃传媒麻豆第一区在线观看| 欧美激情在线看| 久久久99久久精品欧美| 精品国精品国产| 欧美精品一区男女天堂| 久久精品在线免费观看| 久久久久97国产精华液好用吗| 91福利精品视频| 欧美日韩高清一区二区不卡| 欧美三级资源在线| 7777精品伊人久久久大香线蕉超级流畅 | 舔着乳尖日韩一区| 婷婷久久综合九色综合绿巨人 | 国产欧美日韩综合| 国产精品久久久一区麻豆最新章节| 欧美色视频在线| 91麻豆精品国产91久久久更新时间| 国产69精品久久久久777| 成人短视频下载| 色丁香久综合在线久综合在线观看 | 欧美狂野另类xxxxoooo| 91精品国产综合久久精品性色| 99久久夜色精品国产网站| 色噜噜夜夜夜综合网| 欧美高清精品3d| 久久日韩精品一区二区五区| 国产精品毛片a∨一区二区三区| 日韩视频在线一区二区| 亚洲精品一区二区三区蜜桃下载| 欧美日韩亚洲另类| 精品久久久久一区二区国产| 中文字幕av一区二区三区免费看| 91精品国产入口在线| 久久精品一区二区三区不卡牛牛| 91精品国产美女浴室洗澡无遮挡| 色悠久久久久综合欧美99| 8x8x8国产精品| 久久精品网站免费观看| 亚洲免费av网站| 精品一区二区三区av| 91年精品国产| 欧美大片在线观看| 最好看的中文字幕久久| 久久精品国产色蜜蜜麻豆| 99久久精品国产一区| 欧美一级久久久久久久大片| 中文字幕中文乱码欧美一区二区| 久久奇米777| 午夜不卡av免费| 99久久精品国产一区| 欧美mv日韩mv| 亚洲成人自拍一区| 国产91精品精华液一区二区三区 | 国产不卡在线视频| 91在线视频免费91| 久久精品一区二区三区不卡牛牛| 26uuu欧美| 亚洲妇熟xx妇色黄| jvid福利写真一区二区三区| 日韩三级.com| 青青国产91久久久久久| 色婷婷久久久久swag精品| 国产亚洲精品资源在线26u| 视频一区欧美精品| 不卡欧美aaaaa| 精品少妇一区二区三区在线播放| 久久亚洲一级片| 亚洲午夜精品一区二区三区他趣| 日韩精品一二三四| 欧美三级电影一区| 亚洲激情六月丁香| gogogo免费视频观看亚洲一| 久久久久国产精品人| 麻豆精品视频在线| 日韩一区二区三区免费看| 亚洲一区av在线| 欧美综合一区二区| 洋洋av久久久久久久一区| 91在线视频网址| 亚洲精品美腿丝袜| 99久久婷婷国产综合精品电影| 欧美亚日韩国产aⅴ精品中极品| 56国语精品自产拍在线观看| 亚洲精品视频在线看| 色综合色狠狠综合色| 国产精品超碰97尤物18| 成人app在线观看| 国产精品无人区| 91香蕉视频在线| 亚洲精品国产a| 在线区一区二视频| 亚洲一区二区av在线| 欧美日韩一区二区电影| 天天操天天综合网| 日韩一级完整毛片| 狠狠网亚洲精品| 国产精品网站导航| 91蝌蚪porny| 无码av免费一区二区三区试看| 成人理论电影网| 亚洲免费观看高清完整版在线 | 韩国视频一区二区| 国产亚洲一二三区| 99在线视频精品| 国产精品高潮久久久久无| 91蝌蚪porny| 全国精品久久少妇| 久久久综合视频| 成人黄色在线网站| 亚洲自拍与偷拍| 日韩欧美另类在线| 丰满岳乱妇一区二区三区 | 2023国产精品| 99久久婷婷国产精品综合| 亚洲成人在线免费| 久久影院午夜论| 91麻豆精品在线观看| 日韩成人av影视|