【发布时间】:2019-05-19 08:53:01
【问题描述】:
我正在尝试制作一个特定的“吃豆人游戏”。
基本上主要的对象是:pacman和fruit。
背景图是某张地图的图片,表示游戏是被外框绑定的。
框架本身以像素为单位设置,我将其转换为坐标 (Conversion of lat/lng coordinates to pixels on a given map (with JavaScript))。
坐标有以下参数:
public Point3D(double x,double y,double z)
{
_x=x;// latitude
_y=y;// longtitude
_z=z;// altitude
}
public boolean isValid_GPS_Point(Point3D p)
{
return (p.x()<=180&&p.x()>=-180&&p.y()<=90&&p.y()>=-90&&p.z()>=-450);
}
水果是不会移动的静态物体。
所有吃豆人的通用速度为每秒 1 米,进食半径为 1 米,这意味着特定吃豆人进食半径内的每个水果都将被吃掉并从水果列表中删除(“进食半径”更像一个半径为 1 米的三维球体)。
吃豆人的运动是由一种算法确定的(算法:使用水果和吃豆人的列表,我们计算两个列表中两个物体的距离,取特定吃豆人所需的最小距离.
距离公式:
- 通过地图上的 2 个 GPS 点确定矢量。
- 对向量使用平方函数:
sqrt(delta(x)^2+delta(y)^2+ delta(z)^2)
就桂而言:
package gui;
import java.awt.Graphics;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class MainWindow extends JFrame implements MouseListener
{
public BufferedImage myImage;
public MainWindow()
{
initGUI();
this.addMouseListener(this);
}
private void initGUI()
{
MenuBar menuBar = new MenuBar();
Menu File = new Menu("File");
Menu Run=new Menu("Run");
Menu Insert=new Menu("Insert");
MenuItem New=new MenuItem("New");
MenuItem Open = new MenuItem("Open");
MenuItem Save=new MenuItem("Save");
MenuItem start=new MenuItem("start");
MenuItem stop=new MenuItem("stop");
MenuItem packman=new MenuItem("packman");
MenuItem fruit=new MenuItem("fruit");
menuBar.add(File);
menuBar.add(Run);
menuBar.add(Insert);
File.add(New);
File.add(Open);
File.add(Save);
Run.add(start);
Run.add(stop);
Insert.add(packman);
Insert.add(fruit);
this.setMenuBar(menuBar);
try {
myImage = ImageIO.read(new File("C:\\Users\\Owner\\Desktop\\Matala3\\Ariel1.png"));//change according to your path
} catch (IOException e) {
e.printStackTrace();
}
}
int x = -1;
int y = -1;
public void paint(Graphics g)
{
g.drawImage(myImage, 0, 0, this);
if(x!=-1 && y!=-1)
{
int r = 10;
x = x - (r / 2);
y = y - (r / 2);
g.fillOval(x, y, r, r);
}
}
@Override
public void mouseClicked(MouseEvent arg) {
System.out.println("mouse Clicked");
System.out.println("("+ arg.getX() + "," + arg.getY() +")");
x = arg.getX();
y = arg.getY();
repaint();
}
@Override
public void mouseEntered(MouseEvent arg0) {
System.out.println("mouse entered");
}
@Override
public void mouseExited(MouseEvent arg0) {
System.out.println("mouse exited");
}
@Override
public void mousePressed(MouseEvent arg0) {
System.out.println("mouse Click pressed");
}
@Override
public void mouseReleased(MouseEvent arg0) {
System.out.println("mouse Click released");
}
}
从这个类运行它:
package gui;
import javax.swing.JFrame;
import Geom.Point3D;
import gis.Fruit;
public class Main
{
public static void main(String[] args)
{
MainWindow window = new MainWindow();
window.setVisible(true);
window.setSize(window.myImage.getWidth(),window.myImage.getHeight());
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我的主要目标是在我将对象(pacmens 和水果)放在地图上之后,它应该看起来像这样:https://media.giphy.com/media/5UDHI0JLxBBElUFuCs/giphy.gif
我正在寻找一个大致的方向,让我的打包员像这样移动而不是保持静止。
【问题讨论】:
-
TL;博士请发帖minimal reproducible example。我们不需要对您的应用程序了解太多,就可以回答诸如“使对象按特定标准移动”之类的一般性问题。有关 mcve 和基于计算移动对象的示例,请参阅 this answer。
标签: java swing awt graphics2d java-2d