手机网站制作案例,住房建设部官方网站办事大厅,成都网站建设好,腾讯广告代理商将游戏坐标转化成屏幕鼠标坐标
思路说明#xff1a;转化其实是取得两点的相对位置#xff0c;例如将游戏人物移动到另外一个位置#xff08;游戏人物初始位置坐标到目的位置坐标#xff09;#xff0c;鼠标需要移动到屏幕的某个位置。算出游戏的移动距离#xff0c;游戏…将游戏坐标转化成屏幕鼠标坐标
思路说明转化其实是取得两点的相对位置例如将游戏人物移动到另外一个位置游戏人物初始位置坐标到目的位置坐标鼠标需要移动到屏幕的某个位置。算出游戏的移动距离游戏两个点之间的夹角cos,sin,然后映射到屏幕中的两个点。 注意需要提前算出游戏两点距离对应屏幕两点间距离的比例游戏距离/屏幕两点距离只是针对第一人称人物固定屏幕类游戏
1.获取鼠标在屏幕的坐标
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;/*** 展示画布显示鼠标坐标*/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() {Overridepublic 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.坐标操作工具方法 /*** 获取两个点距离* param lat1 第一个位置的x* param lon1 第一个位置的y* param lat2 第二个位置的x* param lon2 第二个位置的y* return 两点之间的距离*/public static double distance(double lat1, double lon1, double lat2, double lon2){double DMath.sqrt((lat2-lat1)*(lat2-lat1)(lon2-lon1)*(lon2-lon1));return D;}/*** 获取两点之间的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 sinMath.abs(lon2-lon1)/distance(lat1,lon1,lat2,lon2);return sin;}/*** 获取两点之间的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 cosMath.abs(lat2-lat1)/distance(lat1,lon1,lat2,lon2);return cos;}/*** 获取第二个位置坐标* 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 lon2distance*sinlon1;double lat2distance*coslat1;System.out.println(第二个坐标xlat2 ylon2);}3.计算游戏对应的屏幕坐标
public static void main(String[] args) {MouseInfo.getMouse();//假如已经算出游戏与屏幕两点距离的比例是3 游戏距离/屏幕距离3Double scale3d;Double value_x1372d;double value_y524d;//假如游戏人物当前所在的游戏位置是902,302 想移动到1372,524double distancedistance(902,302,value_x,value_y);double singetSin(902,302,value_x,value_y);double cosgetCos(902,302,value_x,value_y);//人物固定在屏幕的中间假如屏幕坐标1033,415 算出游戏人物要移动到游戏1372,524所在的屏幕坐标。getPointTow(1033,415,sin,cos,distance/scale);// write your code here}/*** 获取两个点距离* param lat1 第一个位置的x* param lon1 第一个位置的y* param lat2 第二个位置的x* param lon2 第二个位置的y* return 两点之间的距离*/public static double distance(double lat1, double lon1, double lat2, double lon2){double DMath.sqrt((lat2-lat1)*(lat2-lat1)(lon2-lon1)*(lon2-lon1));return D;}/*** 获取两点之间的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 sinMath.abs(lon2-lon1)/distance(lat1,lon1,lat2,lon2);return sin;}/*** 获取两点之间的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 cosMath.abs(lat2-lat1)/distance(lat1,lon1,lat2,lon2);return cos;}/*** 获取第二个位置坐标* 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 lon2distance*sinlon1;double lat2distance*coslat1;System.out.println(第二个坐标xlat2 ylon2);}