一个用Java编写的屏幕测距工具,包括游戏地图测量功能

 该程序提供了一个简单便捷的方式,在屏幕上测量距离,包括游戏地图分析在内。它允许用户准确确定屏幕上两点之间的距离,帮助游戏过程中的战略规划、资源管理和决策制定。

 特点:

  • 简单易用的界面:直观的控制使测量距离变得轻松。
  • 精准测量:提供屏幕距离的精确测量。

注意:确保应用程序窗口覆盖屏幕上感兴趣的区域,以进行准确的测量。对于游戏地图,请调整缩放级别或分辨率,以匹配游戏内的设置,从而进行精确测量。

示例用法:

  • 在策略游戏中,测量单位或游戏地图上的战略点之间的距离,以规划移动并预测敌人的行动。
  • 在角色扮演游戏中,测量位置之间的距离,以估计旅行时间并优化探索路线。
  • 在模拟游戏中,测量对象或地标之间的距离,以计算游戏环境内的尺寸和空间关系。

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class DistanceCalculator extends JFrame {
    private Point point1;
    private Point point2;
    private Point initialClick;

    public DistanceCalculator() {
        setTitle("小影测距计算器");
        setSize(500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setAlwaysOnTop(true); // 设置窗口置顶
        // setExtendedState(JFrame.MAXIMIZED_BOTH);

        JPanel panel = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                g.setColor(Color.RED);
                Font boldLargeFont = new Font("Serif", Font.BOLD, 30);
                g.setFont(boldLargeFont);
                g.drawString("小影测距辅助器",(getWidth()/2)-120,50 );

                Font f2 = new Font("Serif", Font.BOLD, 15);
                g.setFont(f2);
            

                super.paintComponent(g);
                if (point1 != null) {
                    g.setColor(Color.RED);
                    g.fillOval(point1.x - 5, point1.y - 5, 10, 10);
                }
                if (point2 != null) {
                    g.setColor(Color.BLUE);
                    g.fillOval(point2.x - 5, point2.y - 5, 10, 10);
                }
                if (point1 != null && point2 != null) {
                    g.setColor(Color.BLACK);
                    g.drawLine(point1.x, point1.y, point2.x, point2.y);
                    double distance = point1.distance(point2);

                    // 100米等于100像素
                    double mi=100;// 100米
                    double px = 100;// 像素
                    double metersForTargetPixels  = mi / px;// 计算1px定于多少米
                    double resultMi = distance * metersForTargetPixels;// 米

                    g.drawString("距离:" + distance + " 像素;"+resultMi+"米", 10, getHeight() - 10);
                }
            }
        };
        panel.setOpaque(false); // Make the panel transparent
        setUndecorated(true); // Remove window decorations
        setBackground(new Color(100, 100, 100, 100)); // Set the JFrame background color to be transparent

        panel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (point1 == null) {
                    point1 = e.getPoint();
                } else if (point2 == null) {
                    point2 = e.getPoint();
                } else {
                    // Reset points if two points are already recorded
                    point1 = e.getPoint();
                    point2 = null;
                }
                panel.repaint();
            }

            @Override
            public void mousePressed(MouseEvent e) {
                initialClick = e.getPoint();
            }
        });

        panel.addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                // get location of Window
                int thisX = getLocation().x;
                int thisY = getLocation().y;

                // Determine how much the mouse moved since the initial click
                int xMoved = (thisX + e.getX()) - (thisX + initialClick.x);
                int yMoved = (thisY + e.getY()) - (thisY + initialClick.y);

                // Move window to this position
                int X = thisX + xMoved;
                int Y = thisY + yMoved;
                setLocation(X, Y);
            }
        });

        add(panel);
        setVisible(true);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        if (point1 != null && point2 != null) {
            g.setColor(Color.BLACK);
            g.drawLine(point1.x, point1.y, point2.x, point2.y);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(DistanceCalculator::new);
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/638142.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Marin说PCB之POC电路layout设计仿真案例---03

今天天中午午休的时候,我刚要打开手机的准备刷抖音看无忧传媒的学生们的“学习资料”的时候,看到CSDN -APP上有提醒,一看原来是一位道友发的一个问题: 本来小编最近由于刚刚从国外回来,手上的项目都已经结束了&#xf…

MQTT到串口的转发(node.js)

本文针对以下应用场景:已有通过串口通信的设备或软件,想要实现跨网的远程控制。 node.js安装 从 Node.js — Run JavaScript Everywhere下载LTS版本安装包,运行安装程序。(傻瓜安装,按提示点击即可) 设置环…

忍の摸头之术游戏娱乐源码

本资源提供给大家学习及参考研究借鉴美工之用,请勿用于商业和非法用途,无任何技术支持! 忍の摸头之术游戏娱乐源码,抖音上面非常火的摸头杀画面,看得我眼花缭乱,源码拿去玩吧; 目录说明 忍の摸头之术:域…

idea新建项目/模块找不到Spring Initializr

idea创建项目找不到spring intellij,如下图解决 可能是没有下载spring的相应插件,或者没有启用对应的插件 我这里就是没有启用插件,导致的创建项目时找不到按件。 全部启用后,重启idea即可。 重启后可以看到出现了“Spring Initi…

【Andoird开发】android获取蓝牙权限,beacon,android-beacon-library

iBeacon 最先是苹果的技术,使用android-beacon-library包可以在android上开发iBeacon 技术。 iBeacon的发明意义重大。它是一种基于蓝牙低功耗(Bluetooth Low Energy, BLE)技术的定位系统,通过向周围发送信号来标识其位置。这项技…

Docker 容器间通讯

1、虚拟ip/访问 同一网络 安装docker时,docker会默认创建一个内部的桥接网络docker0,每创建一个容器分配一个虚拟网卡,容器之间(包括宿主机)可以根据分配的ip互相访问(ps:其他主机(包括其他主机的容器)无法ping通docker容器ip无法访问&#…

22个C语言小白常见问题总结

一.语言使用错误 在打代码的过程中,经常需要在中文与英文中进行转换,因此常出现一些符号一不小心就用错,用成中文。例如:“;”中文中的分号占用了两个字节,而英文中“;”分号只占用一个字节。编译器只能识…

mysql数据库主从复制,搭建从库

1 期望效果 假设我们现在有两个服务器,两个服务器都有数据库,然后我们命名一个叫主数据库(Master),一个叫从数据库(Slave) 数据备份和容灾:通过主从复制,可以将主数据库…

计算机操作系统核心组件

我是荔园微风,作为一名在IT界整整25年的老兵,今天给大家讲讲操作系统。 操作系统核心组件 用户借助于一个或多个应用程序与操作系统进行交互,常常是通过一个称为shell的特殊应用程序进行的,shell也叫作命令解释器。105今天的大多…

SQL——SELECT相关的题目

目录 197、上升的温度 577、员工奖金 586、订单最多的客户 596、超过5名学生的课 610、判断三角形 620、有趣的电影 181、超过经理收入的员工 1179、重新格式化部门表 1280、学生参加各科测试的次数 1068、产品销售分析I 1075、项目员工I 1084、销售分析III 1327、列出指…

Qt 报错总结 No suitable kits found

目录 “No suitable kits found” 解决 解决方法参考: chatGPT辅助解决QT构建报错error: multiple target patterns 我的解决方法:把语言设置为空 “No suitable kits found” 解决 没有找到合适的kits套件,在安装Qt Creator时没有安装Min…

程序员做推广?我劝你别干

关注卢松松,会经常给你分享一些我的经验和观点。 这是卢松松会员专区,一位会员朋友的咨询,如果你也有自研产品,但不知道如何推广,一定要阅读本文!强烈建议收藏关注,因为你关注的人,决定你看到的…

Ubuntu切换内核版本

#安装内核安装工具 sudo apt-get install software-properties-common sudo add-apt-repository ppa:cappelikan/ppa sudo apt-get update sudo apt-get install mainline#安装指定内核版本(有些版本并不能安装成功) mainline install 5.14.10#更新GRUB配置 sudo update-grub#查…

Linux 软件包管理器 yum的下载、功能介绍及使用

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 Linux下的三种软件安装方…

burpsuite抓包响应报文乱码

1、响应报文中的中文信息乱码 2、解决办法 3、设置成功后重新发起请求

储油罐智控:ThingsBoard网关实现液位温度精准监测

储油罐是采油、炼油企业储存油品的重要设备,对储油罐液位、温度的实时数据监测对企业的库存和安全管理有着重大意义。 场景 对于企业,尤其是加油站来说,高效的罐体液位、温度监测对于优化燃油库存、防止短缺或过剩至关重要。不准确的燃油液位…

05Django项目--前端公共文件和其他html文件的适配

对应视频链接点击直达 Django项目--前端公共文件和其他html文件的适配 对应视频链接点击直达前端页面准备Pubilc页面设置 OVER,不会有人不会吧不会的加Q1394006513结语 接着上一节 前端页面准备 为了方便大家更好的复制,我把整个项目及templates文件夹和…

RabbitMQ(一)概述第一个应用程序

文章目录 概述AMQP和JMS官网安装开始第一个程序 概述 消息队列是实现应用程序和应用程序之间通信的中间件产品 AMQP和JMS 工作体系 官网 https://www.rabbitmq.com/ RabbitMQ是一款基于AMQP、由Erlang语言开发的消息队列产品 安装 # 拉取镜像 docker pull rabbitmq:3.13-m…

运营抖音小店,这件事情每天都需要去做!一个都不能少!

大家好,我是电商小V 咱们的店铺开好之后,然后运营自己的店铺每天需要做好什么事情呢?这个问题是很多新手小伙伴开通抖店之后最关心的问题,咱们今天就来详细的说一下运营抖音小店每天需要做什么呢? 第一点:奖…

commvault学习(8):备份与恢复sql server

1.安装sql server2008r2 安装sql server 2.在客户端添加cv代理mssql server 如果此前的cv代理中没有sql server,那么可以手动再补充 点击setup 添加MSSQL Server 将程序添加到windows防火墙排除表 勾选自动探寻实例 3.备份sql server 3.1配置数据库内容 右击默…