⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browsercanvas.java

📁 Online Map for Mobile
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            new SettingsForm(this);            
        }
    }
 
    class RepeatTask extends TimerTask { 
        RepeatTask(int keyCode) { 
            this.keyCode = keyCode;
        }

        public void run() { 
            if (!busy) { 
                keyAction(keyCode);
            }
        }

        int keyCode;
    }

    class BlinkTask extends TimerTask { 
        public void run() { 
            if (!busy) { 
                selectionColor ^= 0xffffff;
                repaint();
            }
        }
    }

    public void pointerPressed(int x, int y) { 
        focusX = this.x + x*scale;
        focusY = this.y + y*scale;
        repaint();
    }

    public void pointerReleased(int x, int y) { 
        focusX = this.x + x*scale;
        focusY = this.y + y*scale;
        repaint();
    }

    public void pointerDragged(int x, int y) { 
        this.x = focusX - x*scale;
        this.y = focusY - y*scale;
        check();
        repaint();
    }

    public void keyPressed(int keyCode) {
        if (repeatTask != null) { 
            repeatTask.cancel();
        }
        if (!busy) { 
            repeatTask = new RepeatTask(keyCode);
            repeatTimer.schedule(repeatTask, REPEAT_DELAY, REPEAT_PERIOD);
        }
    }

    public void keyReleased(int keyCode) {
        if (!busy) { 
            keyAction(keyCode);
        }
        if (repeatTask != null) { 
            repeatTask.cancel();
            repeatTask = null;
        }
    }
    
    private boolean pointInfo() { 
        if (selection != null && currSelection >= 0) { 
            Location loc = selection[currSelection];
            new InfoForm(this, selectionIndex, selection[currSelection], this);
            return true;
        }        
        return false;
    }

    private boolean nextPoint() { 
        if (selection != null && selectionIndex.type == Index.POINT) { 
            for (int i = 0; i < selection.length; i++) { 
                if (++currSelection == selection.length) { 
                    currSelection = 0;
                }
                Location loc = selection[currSelection];
                if (loc.points[0] >= x && loc.points[0] - x < screenWidth*scale
                    && loc.points[1] >= y && loc.points[1] - y < screenHeight*scale)
                {
                    addCommand(MapBrowser.INFO_CMD);
                    return true;
                }
            }
            currSelection = -1;
        }
        return false;
    }

    private void keyAction(int keyCode) {
        int dx = 0, dy = 0;

	switch (keyCode) {
        case KEY_NUM0:
            if (!pointInfo()) { 
                browser.error(Locale.current.getResource("No current point"), this);
            }
            return;
        case KEY_NUM1:
            dx = -1;
            dy = -1;
            break;
        case KEY_NUM2:
            dy = -1;
            break;
        case KEY_NUM3:
            dx = 1;
            dy = -1;
            break;
        case KEY_NUM4:
            dx = -1;
            break;
        case KEY_NUM5:
            if (!nextPoint()) { 
                browser.error(Locale.current.getResource("No points selected"), this);
            }
            repaint();
            return;
        case KEY_NUM6:
            dx = 1;
            break;
        case KEY_NUM7:
            dx = -1;
            dy = 1;
            break;
        case KEY_NUM8:
            dy = 1;
            break;
        case KEY_NUM9:
            dx = 1;
            dy = 1;
            break;
        case KEY_STAR:
            if (zoomIn()) {
                check();
            }
            return;
        case KEY_POUND:
            if (zoomOut()) {
                check();
            }
            return;
        default:
            if ((browser.settings.flags & Settings.FAST_SCROLL) != 0) { 
                dx = stepX*scale;
                dy = stepY*scale;
                switch (getGameAction(keyCode)) { 
                case LEFT:
                    x -= dx;
                    break;
                case RIGHT:
                    x += dx;
                    break;
                case UP:
                    y -= dy;
                    break;
                case DOWN:
                    y += dy;
                    break;
                case FIRE:
                    if (!pointInfo()) { 
                        browser.error(Locale.current.getResource("No current point"), this);
                    }
                    return;
                case GAME_A:
                    if (zoomIn()) {
                        check();
                    }
                    return;
                case GAME_B:
                    if (zoomOut()) {
                        check();
                    }
                    return;
                default:
                    return;
                }
                check();
                return;
            } else { 
                switch (getGameAction(keyCode)) {
                case UP:
                    dy = -1;
                    break;
                case LEFT:
                    dx = -1;
                    break;
                case FIRE:
                    if (!pointInfo()) { 
                        browser.error(Locale.current.getResource("No current point"), this);
                    }
                    return;
                case RIGHT:
                    dx = 1;
                    break;
                case DOWN:
                    dy = 1;
                    break;
                }
            }
        }
        if (scale != 1) { 
            boolean redrawAll = false;
            focusX += dx*focusWidth*scale/zoom;
            focusY += dy*focusHeight*scale/zoom;
            if (focusX < x) { 
                redrawAll = true;
                x -= stepX*scale;
                focusX += stepX*scale;
                if (x < 0) { 
                    focusX += x;
                    x = 0;
                    if (focusX < 0) { 
                        focusX = 0;
                    }
                }
            }
            if (focusX - x > (screenWidth - focusWidth)*scale) { 
                redrawAll = true;
                x += stepX*scale;
                focusX -= stepX*scale;
                if (x + screenWidth*scale > browser.width) { 
                    focusX += x + screenWidth*scale - browser.width;
                    x = browser.width - screenWidth*scale;
                    if (focusX + focusWidth*scale > browser.width) { 
                        focusX = browser.width - focusWidth*scale;
                    }
                }
            }
            if (focusY < y) { 
                redrawAll = true;
                y -= stepY*scale;
                focusY += stepY*scale;
                if (y < 0) { 
                    focusY += y;
                    y = 0;
                    if (focusY < 0) { 
                        focusY = 0;
                    }
                }
            }
            if ((focusY - y) > (screenHeight - focusHeight)*scale) { 
                redrawAll = true;
                y += stepY*scale;
                focusY -= stepY*scale;
                if (y + screenHeight*scale > browser.height) { 
                    focusY += y + screenHeight*scale - browser.height;
                    y = browser.height - screenHeight*scale;
                    if (focusY + focusHeight*scale > browser.height) { 
                        focusY = browser.height - focusHeight*scale;
                    }
                }
            }
            if (redrawAll) { 
                repaint();
            } else { 
                repaint(((dx <= 0 ? focusX : focusX - focusWidth*scale/zoom) - x) / scale,
                        ((dy <= 0 ? focusY : focusY - focusHeight*scale/zoom) - y) / scale,
                        focusWidth + focusWidth/zoom + 2, 
                        focusHeight + focusHeight/zoom + 2);
            }
        } else { 
            x += dx*stepX;
            y += dy*stepY;
            check();
        }
    }


    private void check() { 
        if (x + screenWidth*scale > browser.width) { 
            x = browser.width - screenWidth*scale;
        }
        if (x < 0) { 
            x = 0;
        } 
        if (y + screenHeight*scale > browser.height) { 
            y = browser.height - screenHeight*scale;
        }
        if (y < 0) { 
            y = 0;
        }
        if (scale != 1) { 
            if (focusX < x || (focusX - x) > (screenWidth - focusWidth)*scale
                || focusY < y || (focusY - y) > (screenHeight - focusHeight)*scale)
            {
                focusX = x + focusX0;
                focusY = y + focusY0;
            }
            if (focusX + focusWidth*scale > browser.width) { 
                focusX = browser.width - focusWidth*scale;
            }
            if (focusY + focusHeight*scale > browser.height) { 
                focusY = browser.height - focusHeight*scale;
            }
        }
        repaint();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -