【发布时间】:2018-03-28 15:32:44
【问题描述】:
我正在尝试创建 2D 塔防。我在 Java 中创建它并使用 Slick2D 库。我正在为敌人使用 A* 探路者。探路者工作完美,可以在控制台中以正确的方式打印。但是我无法将探路者 x 和 y 坐标应用于敌人的 x 和 y 坐标。我希望敌人图像相应地移动到探路者找到的 x 和 y。 对于探路者;它使用 10x10 的二维数组。
AStarPathFinder pathfinder = new AStarPathFinder(map, MAX_PATH_LENGTH, false);
Path path = pathfinder.findPath(null, (int)startPosX, (int)startPosY, endPosX, endPosY);
int length = path.getLength();
public enemy() throws SlickException {
}
@Override
public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
map = new LoadMap();
System.out.println(length);
}
@Override
public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException, InterruptedException {
if (curr_x != endPosX && curr_y != endPosY) {
for (i = 0; i < length; i++) {
Thread.sleep(1000);
curr_x = path.getX(i);
curr_y = path.getY(i);
System.out.println("Move From: " + (int) prev_x + "," + (int) prev_y + ".");
System.out.println("Move To: " + (int) curr_x + "," + (int) curr_y + ".");
if (curr_x - prev_x > 0) { //RIGHT
System.out.println("RIGHT");
startPosX = startPosX + delta*speed/300;
} else if (curr_x - prev_x < 0) { //LEFT
System.out.println("LEFT");
startPosX = startPosX - delta*speed/300;
} else if (curr_y - prev_y > 0) { //DOWN
System.out.println("DOWN");
startPosY = startPosY + delta*speed/300;
} else if (curr_y - prev_y < 0) { //UP
System.out.println("UP");
startPosY = startPosY - delta*speed/300;
}
prev_x = curr_x;
prev_y = curr_y;
System.out.println("------------------");
if (curr_x == endPosX && curr_y == endPosY) {
System.out.println("Done!");
}
}
}
}
@Override
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
e1.draw(startPosX*w,startPosY*w,w,w);
g.drawString("posX "+startPosX,100,100);
g.drawString("posY "+startPosY,100,120);
}
如果有人能把我推向正确的方向,我会很高兴。 谢谢你。
【问题讨论】:
-
敌人的 render() 函数应该是被某人调用的。什么类在渲染屏幕?
-
不就是把敌人坐标设置为探路者给定的x和y吗?对不起,我想我不明白
-
@alex440 ,敌人类正在主类中使用并且正在正确渲染。那不是问题。问题是
e1的位置。 @MCMastery 这就是我希望 x 和 y 坐标“流畅”的重点。就像现在一样,for 循环运行了 x 次,然后设置敌人图像的位置。 -
我认为你应该澄清你的问题。似乎您试图在坐标 startPosX、startPosY 处绘制 e1,并且您说坐标是正确的并且渲染它不是问题。那么有什么问题呢?
-
这个问题不是小事。确定路径是第一步,但是您需要相应地移动实体,这在很大程度上取决于您的游戏和游戏架构。您基本上需要从您确定的实体路径中取出最近的坐标,并将您的实体移向该坐标,直到其均匀。你重复这个直到你的路径是空的。同时,您总是需要更新您的路径,以防地图或实体改变其位置。由于缺少架构信息,很难说出您的确切问题出在哪里
标签: java image move path-finding slick2d