国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

將游戲坐標(biāo)轉(zhuǎn)化成屏幕鼠標(biāo)坐標(biāo)

這篇具有很好參考價值的文章主要介紹了將游戲坐標(biāo)轉(zhuǎn)化成屏幕鼠標(biāo)坐標(biāo)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

將游戲坐標(biāo)轉(zhuǎn)化成屏幕鼠標(biāo)坐標(biāo)

思路說明:轉(zhuǎn)化其實是取得兩點(diǎn)的相對位置,例如將游戲人物移動到另外一個位置(游戲人物初始位置坐標(biāo)到目的位置坐標(biāo)),鼠標(biāo)需要移動到屏幕的某個位置。算出游戲的移動距離,游戲兩個點(diǎn)之間的夾角(cos,sin),然后映射到屏幕中的兩個點(diǎn)。
注意:需要提前算出游戲兩點(diǎn)距離對應(yīng)屏幕兩點(diǎn)間距離的比例(游戲距離/屏幕兩點(diǎn)距離),只是針對第一人稱,人物固定屏幕類游戲文章來源地址http://www.zghlxwxcb.cn/news/detail-645990.html

1.獲取鼠標(biāo)在屏幕的坐標(biāo)

package com.company;

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.util.Timer;
import java.util.TimerTask;

public class MouseInfo extends JFrame {
    private final JPanel contentPanel = new JPanel();
    JLabel value_x = null;
    JLabel value_y = null;

    /**
     * 展示畫布,顯示鼠標(biāo)坐標(biāo)
     */
    public static void getMouse() {
        try {
            MouseInfo info_frame = new MouseInfo();
            info_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            info_frame.setVisible(true);
            info_frame.setAlwaysOnTop(true);
            Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    Point point = java.awt.MouseInfo.getPointerInfo().getLocation();
                    info_frame.value_x.setText("" + point.x);
                    info_frame.value_y.setText("" + point.y);
                }
            }, 100, 100);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Create the dialog.
     */
    public MouseInfo() {
        setTitle("\u9F20\u6807\u5750\u6807\u83B7\u53D6\u5668");
        setBounds(100, 100, 217, 156);
        getContentPane().setLayout(new BorderLayout());
        contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
        getContentPane().add(contentPanel, BorderLayout.CENTER);
        contentPanel.setLayout(null);

        JLabel lblx = new JLabel("\u5750\u6807x:");
        lblx.setFont(new Font("宋體", Font.PLAIN, 15));
        lblx.setBounds(22, 27, 66, 31);
        contentPanel.add(lblx);

        JLabel lbly = new JLabel("\u5750\u6807y:");
        lbly.setFont(new Font("宋體", Font.PLAIN, 15));
        lbly.setBounds(22, 68, 66, 31);
        contentPanel.add(lbly);

        value_x = new JLabel("0");
        value_x.setForeground(Color.BLUE);
        value_x.setFont(new Font("宋體", Font.PLAIN, 20));
        value_x.setBounds(82, 27, 66, 31);
        contentPanel.add(value_x);

        value_y = new JLabel("0");
        value_y.setForeground(Color.BLUE);
        value_y.setFont(new Font("宋體", Font.PLAIN, 20));
        value_y.setBounds(82, 68, 66, 31);
        contentPanel.add(value_y);
    }
}

2.坐標(biāo)操作工具方法

 /**
     * 獲取兩個點(diǎn)距離
     * @param lat1 第一個位置的x
     * @param lon1 第一個位置的y
     * @param lat2 第二個位置的x
     * @param lon2 第二個位置的y
     * @return 兩點(diǎn)之間的距離
     */
    public static double distance(double lat1, double lon1, double lat2, double lon2)
    {
        double D=Math.sqrt((lat2-lat1)*(lat2-lat1)+(lon2-lon1)*(lon2-lon1));
        return D;
    }

    /**
     * 獲取兩點(diǎn)之間的sin 值
     * @param lat1 第一個位置的x
     * @param lon1 第一個位置的y
     * @param lat2 第二個位置的x
     * @param lon2 第二個位置的y
     * @return
     */
    public static double getSin(double lat1, double lon1, double lat2, double lon2){
        double sin=Math.abs(lon2-lon1)/distance(lat1,lon1,lat2,lon2);
        return sin;
    }

    /**
     * 獲取兩點(diǎn)之間的cos 值
     * @param lat1 第一個位置的x
     * @param lon1 第一個位置的y
     * @param lat2 第二個位置的x
     * @param lon2 第二個位置的y
     * @return
     */
    public static double getCos(double lat1, double lon1, double lat2, double lon2){
        double cos=Math.abs(lat2-lat1)/distance(lat1,lon1,lat2,lon2);
        return cos;
    }

    /**
     * 獲取第二個位置坐標(biāo)
     * @param lat1
     * @param lon1
     * @param sin
     * @param cos
     * @param distance
     */
    public static void getPointTow(double lat1, double lon1 ,double sin ,double cos,double distance){
        double lon2=distance*sin+lon1;
        double lat2=distance*cos+lat1;
        System.out.println("第二個坐標(biāo)x:"+lat2 +";y:"+lon2);
    }

3.計算游戲?qū)?yīng)的屏幕坐標(biāo)

public static void main(String[] args) {
        MouseInfo.getMouse();

        //假如已經(jīng)算出游戲與屏幕兩點(diǎn)距離的比例是3 (游戲距離/屏幕距離=3)
        Double scale=3d;

        Double value_x=1372d;
        double value_y=524d;

        //假如游戲人物當(dāng)前所在的游戲位置是902,302 ,想移動到1372,524
        double distance=distance(902,302,value_x,value_y);

        double sin=getSin(902,302,value_x,value_y);
        double cos=getCos(902,302,value_x,value_y);
        //人物固定在屏幕的中間,假如屏幕坐標(biāo)1033,415 ,算出游戲人物要移動到游戲1372,524所在的屏幕坐標(biāo)。
        getPointTow(1033,415,sin,cos,distance/scale);
	// write your code here
    }

    /**
     * 獲取兩個點(diǎn)距離
     * @param lat1 第一個位置的x
     * @param lon1 第一個位置的y
     * @param lat2 第二個位置的x
     * @param lon2 第二個位置的y
     * @return 兩點(diǎn)之間的距離
     */
    public static double distance(double lat1, double lon1, double lat2, double lon2)
    {
        double D=Math.sqrt((lat2-lat1)*(lat2-lat1)+(lon2-lon1)*(lon2-lon1));
        return D;
    }

    /**
     * 獲取兩點(diǎn)之間的sin 值
     * @param lat1 第一個位置的x
     * @param lon1 第一個位置的y
     * @param lat2 第二個位置的x
     * @param lon2 第二個位置的y
     * @return
     */
    public static double getSin(double lat1, double lon1, double lat2, double lon2){
        double sin=Math.abs(lon2-lon1)/distance(lat1,lon1,lat2,lon2);
        return sin;
    }

    /**
     * 獲取兩點(diǎn)之間的cos 值
     * @param lat1 第一個位置的x
     * @param lon1 第一個位置的y
     * @param lat2 第二個位置的x
     * @param lon2 第二個位置的y
     * @return
     */
    public static double getCos(double lat1, double lon1, double lat2, double lon2){
        double cos=Math.abs(lat2-lat1)/distance(lat1,lon1,lat2,lon2);
        return cos;
    }

    /**
     * 獲取第二個位置坐標(biāo)
     * @param lat1
     * @param lon1
     * @param sin
     * @param cos
     * @param distance
     */
    public static void getPointTow(double lat1, double lon1 ,double sin ,double cos,double distance){
        double lon2=distance*sin+lon1;
        double lat2=distance*cos+lat1;
        System.out.println("第二個坐標(biāo)x:"+lat2 +";y:"+lon2);
    }

到了這里,關(guān)于將游戲坐標(biāo)轉(zhuǎn)化成屏幕鼠標(biāo)坐標(biāo)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Qt音視頻開發(fā)37-識別鼠標(biāo)按下像素坐標(biāo)

    在和視頻交互過程中,用戶一般需要在顯示視頻的通道上點(diǎn)擊對應(yīng)的區(qū)域,彈出對應(yīng)的操作按鈕,將當(dāng)前點(diǎn)擊的區(qū)域或者繪制的多邊形區(qū)域坐標(biāo)或者坐標(biāo)點(diǎn)集合,發(fā)送出去,通知其他設(shè)備進(jìn)行處理。比如識別到很多人臉,用戶單擊某個人臉后指定對該人臉進(jìn)行詳細(xì)的信息查詢

    2023年04月16日
    瀏覽(21)
  • Qt/C++音視頻開發(fā)60-坐標(biāo)拾取/按下鼠標(biāo)獲取矩形區(qū)域/轉(zhuǎn)換到視頻源真實坐標(biāo)

    通過在通道畫面上拾取鼠標(biāo)按下的坐標(biāo),然后鼠標(biāo)移動,直到松開,根據(jù)松開的坐標(biāo)和按下的坐標(biāo),繪制一個矩形區(qū)域,作為熱點(diǎn)或者需要電子放大的區(qū)域,拿到這個坐標(biāo)區(qū)域,用途非常多,可以直接將區(qū)域中的畫面放大,也可以將該圈起來的區(qū)域位置發(fā)給設(shè)備,由設(shè)備設(shè)定

    2024年02月03日
    瀏覽(26)
  • Qt/C++音視頻開發(fā)37-識別鼠標(biāo)按下像素坐標(biāo)

    在和視頻交互過程中,用戶一般需要在顯示視頻的通道上點(diǎn)擊對應(yīng)的區(qū)域,彈出對應(yīng)的操作按鈕,將當(dāng)前點(diǎn)擊的區(qū)域或者繪制的多邊形區(qū)域坐標(biāo)或者坐標(biāo)點(diǎn)集合,發(fā)送出去,通知其他設(shè)備進(jìn)行處理。比如識別到很多人臉,用戶單擊某個人臉后指定對該人臉進(jìn)行詳細(xì)的信息查詢

    2024年02月11日
    瀏覽(28)
  • 小程序騰訊坐標(biāo)高德坐標(biāo)之間轉(zhuǎn)化

    要在JavaScript中使用 coordtransform 庫將騰訊坐標(biāo)(GCJ02)與高德坐標(biāo)(火星坐標(biāo),也是GCJ02)進(jìn)行轉(zhuǎn)換,你可以按照以下示例代碼進(jìn)行操作: javascript復(fù)制代碼 // 引入coordtransform庫 const coordtransform = require(\\\'coordtransform\\\'); // 定義騰訊坐標(biāo)(GCJ02)經(jīng)緯度 const tencentLng = 113.123456; const

    2024年02月12日
    瀏覽(22)
  • UE5 坐標(biāo)轉(zhuǎn)化

    一、先附上UE官方有關(guān)坐標(biāo)空間的介紹:坐標(biāo)空間術(shù)語 二、在C++中進(jìn)行坐標(biāo)轉(zhuǎn)化,直接附上代碼:

    2024年02月15日
    瀏覽(18)
  • 極坐標(biāo)轉(zhuǎn)化

    極坐標(biāo)轉(zhuǎn)化

    在數(shù)學(xué)中,極坐標(biāo)系是一個二維坐標(biāo)系統(tǒng)。該坐標(biāo)系統(tǒng)中任意位置可由一個夾角和一段相對原點(diǎn)—極點(diǎn)的距離來表示。極坐標(biāo)系的應(yīng)用領(lǐng)域十分廣泛,包括數(shù)學(xué)、物理、工程、航海、航空以及機(jī)器人領(lǐng)域。 兩點(diǎn)間的關(guān)系用夾角和距離很容易表示時,極坐標(biāo)系便顯得尤為有用;

    2024年02月09日
    瀏覽(25)
  • 高德地圖 其他地圖坐標(biāo)系轉(zhuǎn)化為高德坐標(biāo)系

    此篇以百度地圖為例 ?1、去高德地圖注冊自己的key(注冊流程可借鑒百度地圖注冊流程) 2、什么是坐標(biāo) 地球坐標(biāo)系——WGS84:常見于?GPS?設(shè)備,Google?地圖等國際標(biāo)準(zhǔn)的坐標(biāo)體系。 火星坐標(biāo)系——GCJ-02:中國國內(nèi)使用的被強(qiáng)制加密后的坐標(biāo)體系,高德坐標(biāo)就屬于該種坐標(biāo)體系

    2024年02月08日
    瀏覽(19)
  • 虛幻引擎游戲開發(fā)過程中,游戲鼠標(biāo)如何雙擊判定?

    虛幻引擎游戲開發(fā)過程中,游戲鼠標(biāo)如何雙擊判定?

    UE虛幻引擎對于游戲開發(fā)者來說都不陌生,市面上有47%主機(jī)游戲使用虛幻引擎開發(fā)游戲。作為是一款游戲的核心動力,它的功能十分完善,囊括了場景制作、燈光渲染、動作鏡頭、粒子特效、材質(zhì)藍(lán)圖等。本文介紹了虛幻引擎游戲開發(fā)過程中游戲鼠標(biāo)雙擊判定,一起來看看吧

    2024年02月13日
    瀏覽(27)
  • 高德地圖與百度地圖坐標(biāo)相互轉(zhuǎn)化

    1. WGS-84原始坐標(biāo)系 ,一般用國際GPS紀(jì)錄儀記錄下來的經(jīng)緯度,通過GPS定位拿到的原始經(jīng)緯度,Google和高德地圖定位的的經(jīng)緯度(國外)都是基于WGS-84坐標(biāo)系的;但是在國內(nèi)是不允許直接用WGS84坐標(biāo)系標(biāo)注的,必須經(jīng)過加密后才能使用; 2. GCJ-02坐標(biāo)系 ,又名“火星坐標(biāo)系

    2024年02月16日
    瀏覽(28)
  • C#開發(fā)的OpenRA游戲的游戲界面內(nèi)鼠標(biāo)處理窗口

    C#開發(fā)的OpenRA游戲的游戲界面內(nèi)鼠標(biāo)處理窗口 OpenRA游戲里,游戲上面所有物品顯示,都是基于窗口容器。 前面也討論過,其實就是基于ingame.yaml文件來布局和創(chuàng)建的, 在ingame.yaml文件里,根窗口Container@INGAME_ROOT,共有六個子節(jié)點(diǎn): Children: ?? ?LogicKeyListener@GLOBAL_KEYHANDLER: ??

    2024年02月11日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包