Hallo Leute,
also ich programmiere momentan ein Online Game und habe dabei folgendes bisher gemacht:
1) den A* Algorithmus für "intelligente" Bewegungen
2) entsprechende Klassen Player, Monster...
Mein aktuelles Problem besteht in folgendem Punkt:
nachdem ein Doppelklick in der client.java festgestellt wurde, soll der Spieler gelöscht und mittels des A* Algorithmus zum neuen Punkt bewegt werden. Momentan wird der Spieler nur an die neue Stelle gezeichnet, d.h. nachher ist theoretisch die ganze Spielfläche voll, obwohl ich map.getCell(i,j).removePlayer(player); aufrufe, wonach in der map der Spieler gelöscht werden sollte.
Ferner will ich nachher den A* darauf anwenden, anliegend die aufrufende Methode davon, wo immer als Fehler das getX() bzw. getY() bei p.setX und p.setY angezeigt wird.
Wie gesagt, für Vorschläge bin ich immer dankbar, die Datenstrukturen wachsen weiter und wollen kein Ende nehmen und solche Probleme halten da immer nur auf.
also ich programmiere momentan ein Online Game und habe dabei folgendes bisher gemacht:
1) den A* Algorithmus für "intelligente" Bewegungen
2) entsprechende Klassen Player, Monster...
Mein aktuelles Problem besteht in folgendem Punkt:
nachdem ein Doppelklick in der client.java festgestellt wurde, soll der Spieler gelöscht und mittels des A* Algorithmus zum neuen Punkt bewegt werden. Momentan wird der Spieler nur an die neue Stelle gezeichnet, d.h. nachher ist theoretisch die ganze Spielfläche voll, obwohl ich map.getCell(i,j).removePlayer(player); aufrufe, wonach in der map der Spieler gelöscht werden sollte.
Code:
public void mouseClicked(MouseEvent event)
{
for (int i = 0; i < client.map.getSizeX(); i++) // das Spielfeld wird um 45 Grad gedreht
{ // d.h. die einzelnen Kacheln werden etwas ueberlappend und versetzt gezeichnet
for (int j = 0; j < client.map.getSizeY(); j++)
{
if (event.getClickCount()==2)
{
Polygon p2 = client.polyMap.getPolygon(i, j);
if (p2.contains(event.getX(), event.getY())) {
System.out.println( "x = " + i + "y = " +j);
Player player = (Player) map.Players.get(0);
map.getCell(i,j).removePlayer(player);
player.setX(i);
player.setY(j);
map.getCell(i,j).setPlayer(player);
mainMap_repaint();
}
}
}
}
}
Ferner will ich nachher den A* darauf anwenden, anliegend die aufrufende Methode davon, wo immer als Fehler das getX() bzw. getY() bei p.setX und p.setY angezeigt wird.
Code:
public class Movements {
public void moveAstar(Monster m, Player ziel){
AStarPathFinder astar = new AStarPathFinder(map, m.getX(), m.getY(), ziel.getX(), ziel.getY());
astar.Calc();
m.setPathFinder(astar); //Lösungswege berechnen und den Path übergeben!
if (astar.getPath() != null)
{ // solange Vector mit Wegsteucken gefuellt ist
map.getCell(m.getX(), m.getY()).removeMonster(m); //Position aendern
m.setX(astar.getPath().firstElement().getX()); //ACHTUNG: hier zeigt es mir einen Fehler an
m.setY(astar.getPath().firstElement().getY()); // obwohl es vorher ging!!!!
map.getCell(m.getX(),m.getY()).setMonster(m);
astar.getPath().removeElement(astar.getPath().firstElement()); // entferne 1. Element
}
}
public void movePlayer(Player p, int zielX, int zielY){
AStarPathFinder astar = new AStarPathFinder(map, p.getX(), p.getY(), zielX, zielY);
//Lösungswege berechnen und den Path übergeben!
if (astar.getPath() != null)
{ // solange Vector mit Wegsteucken gefuellt ist
map.getCell(p.getX(), p.getY()).removePlayer(p); //Position aendern
p.setX(astar.getPath().firstElement().getX()); //ACHTUNG: gleiches PROBLEM wie beim
p.setY(astar.getPath().firstElement().getY()); // moveAstar()!!!!!!
map.getCell(p.getX(),p.getY()).setPlayer(p);
astar.getPath().removeElement(astar.getPath().firstElement()); // entferne 1. Element
}
}
Wie gesagt, für Vorschläge bin ich immer dankbar, die Datenstrukturen wachsen weiter und wollen kein Ende nehmen und solche Probleme halten da immer nur auf.