Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet

Tobero

Mitglied
Ich habe einen Grid Vector2[][] und würde gerne wissen, in welchem Grid Feld sich diese Befindet. Ich hab es hin bekommen, doch es funktioniert nur solange, bis ich meine Kamera bewege. Die Position bewegt sich zwar mit der Maus mit, wenn ich sie bewege, aber wenn ich die Kamera bewege, hält es sich nicht mehr an den Grid.Passt au8f den GridPasst nicht mehr, wenn ich die Kamera bewege
[CODE lang="java" title="Mein Code für aufs Grid beziehen"]Vector2 position = new Vector2(game.getMouseManager().getMouseX(), game.getMouseManager().getMouseY());

Vector2 drawPos = new Vector2((Math.round(position.x/Tile.TILEWIDTH)*Tile.TILEWIDTH), (Math.round(position.y/Tile.TILEHEIGHT)*Tile.TILEHEIGHT));
[/CODE]
Ich weiß, ich habe hier die Kamera Position nicht einbezogen, einfach nur aus dem Grund, weil ich nicht weiß wie.
 
Du musst die Kamera-Position einfach mit einrechnen, sprich x und y Werte entweder addieren oder subtrahieren, ganz simpel. Also etwas Pseudo-Code:

Java:
Vector2 currentPositionInWorld = Vector2(
        mousePosition.x - drawingOffset.x,
        mousePosition.y - drawingOffset.y);

Dann hast du deine Position innerhalb der Welt unabhaengig von der Kamera. Vorzeichen sich wahrscheinlich falsch, die verdrehe ich immer.
 
Ich hab aufgenommen, wie es jetzt mit diesem Script funktioniert. Ich weiß nicht wieso, aber sobald ich das Offset der Kamera ändere, bewegt sich das Tile kurz außerhalb des Grid und bleibt wo es war. Ich wollte eigentlich, das das Tile im einem 32*32 Grid bewegt, bei der Maus Position
 

Anhänge

Ich hab jetzt es hingekriegt, das es au seinem Tile bleibt, aber es ist noch immer nicht auf die Maus Position abgestimmt
[CODE lang="java" title="Mein Code für das Tile Grid Binding"] int mouse_x = (int)game.mousePosInWorld.x;
int mouse_y = (int)game.mousePosInWorld.y;


double tile_u = mouse_x;
double tile_y = mouse_y;



tile_u = Math.round(mouse_x/Tile.TILEWIDTH)*Tile.TILEWIDTH-game.getGameCamera().getxOffset();
tile_y = Math.round(mouse_y/Tile.TILEHEIGHT)*Tile.TILEHEIGHT-game.getGameCamera().getyOffset();

Text.drawString(g, tile_u + ", " + tile_y, new Vector2(tile_u, tile_y), true, Color.white, Assets.fontAtlas.get("ethnocentric.ttf:24"));


if (isValidPos)
g.drawImage(Assets.spriteAtlas.get("HutsValidTemplate.png")[0][0], (int)(tile_u), (int)(tile_y), Tile.TILEWIDTH, Tile.TILEHEIGHT, null);
else
g.drawImage(Assets.spriteAtlas.get("HutsInvalidTemplate.png")[0][0], (int)(tile_u), (int)(tile_y), Tile.TILEWIDTH, Tile.TILEHEIGHT, null);[/CODE]
 

Anhänge

Ohne es am laufen zu haben um debuggen zu koennen fallen mir spontan zwei Sachen ein: Erstens, dein Kamera Offset ist, glaube ich, nicht in ganzen Tiles. Sprich du veraenderst die Position augenscheinlich um Bruchteile von Tiles. Zweitens, musst du eventuell den Kamera Offset hinzunehmen und nicht abziehen (Vorzeichen sind mein Erzfeind)?
 
Ja, das hinzufügen hab ich schon gemacht, da ist es dann bei der Maus Position aber bei den 0-16 Positions unterschieden ist es immer etwas neben dem vorgesehenen Grid. Und das offset ändere ich immer um 7, aber würde ich es pro frame um 32 bewegen währe es viel zu schnell
 
Ja, das meinte ich. Du rastest die Position auf dein Grid ein, und dann rechnest du die Kamera Position hinzu, damit bist du dann natuerlich neben deinem Grid abhaengig davon wo die Kamera gerade steht. Also zuerst die Position umrechen, dann auf das Grid einrasten.
 
Ich dachte da an so einen Ansatz:

Java:
int mouseX = game.mousePosInWorld.x;
double mouseXTranslated = mouseX + game.getGameCamera().getxOffset();
double tileX = Math.round(mouseXTranslated / Tile.TILEWIDTH) * Tile.TILEWIDTH;

Kann mich da aber auch irren.
 

Zurück
Oben