Ich versuche, die Maus auszuwählen und die Kachel, auf die ich klicke, ändert sich, was auch immer die gegenüberliegende Kachel ist. Gras zu Erde, aber jede Grasfliese hat die gleiche "ID", so dass jede Grasfliese auf dem Bildschirm zu Dreck wird. Wie kann ich diese Fliesen besser herstellen? Ich will es zufällig generiert und nicht aus einem Array Karte wie 000001100.Java - Wie man jeder Kachel, die aus einem Array generiert wird, eine eindeutige "ID" gibt
Block-Klasse
public class Block {
public enum BlockType {
Dirt,
Grass,
Selection
}
BlockType Type;
Vector2f Position;
Image texture;
boolean breakable;
public Block(BlockType Type, Vector2f Position, Image texture, boolean breakable) {
this.Type = Type;
this.Position = Position;
this.texture = texture;
this.breakable = breakable;
}
public BlockType getType() {
return Type;
}
public void setType(BlockType value) {
Type = value;
}
public Vector2f getPosition() {
return Position;
}
public void setPosition(Vector2f value) {
Position = value;
}
public Image gettexture() {
return texture;
}
public void settexture(Image value) {
texture = value;
}
public boolean getbreakable() {
return breakable;
}
public void setbreakable(boolean value) {
breakable = value;
}
}
Tile-Generation Klasse
public class TileGen {
Block block;
public Block[] tiles = new Block[2];
public int width, height;
public int[][] index;
boolean selected;
int mouseX, mouseY;
int tileX, tileY;
Image dirt, grass, selection;
SpriteSheet tileSheet;
public void init() throws SlickException {
tileSheet = new SpriteSheet("assets/tiles/tileSheet.png", 64, 64);
grass = tileSheet.getSprite(0,0);
dirt = tileSheet.getSprite(1,0);
selection = tileSheet.getSprite(2,0);
tiles[0] = new Block(BlockType.Grass, new Vector2f(tileX,tileY), grass, true);
tiles[1] = new Block(BlockType.Dirt, new Vector2f(tileX,tileY), dirt, true);
width = 50;
height = 50;
index = new int[width][height];
Random rand = new Random();
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
index[x][y] = rand.nextInt(2);
}
}
}
public void update(GameContainer gc) {
Input input = gc.getInput();
mouseX = input.getMouseX();
mouseY = input.getMouseY();
tileX = mouseX/width;
tileY = mouseY/height;
if(input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)) {
selected = true;
}
else{
selected = false;
}
System.out.println(tiles[index[tileX][tileY]]);
}
public void render() {
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
tiles[index[x][y]].texture.draw(x * 64, y *64);
if(IsMouseInsideTile(x, y))
selection.draw(x * 64, y * 64);
if(selected && tiles[index[x][y]].breakable) {
if(tiles[index[tileX][tileY]].Type == BlockType.Grass)
tiles[index[tileX][tileY]].texture = dirt;
}
}
}
}
public boolean IsMouseInsideTile(int x, int y)
{
return (mouseX >= x * 64 && mouseX <= (x + 1) * 64 &&
mouseY >= y * 64 && mouseY <= (y + 1) * 64);
}
ich gezogen werden verwende Slick2d Bibliothek. Ich bin mir nicht sicher, ob ID das richtige Wort ist, aber ich hoffe, Sie können verstehen, was ich zu fragen versuche.
Ohh okay, das macht vollkommen Sinn. Dachte nie so darüber nach. Danke, ich war völlig ratlos und es endete mit einer einfachen Lösung. Ich denke, ich hatte es so, denn bevor ich es neu zeichnete, anstatt die Textur zu ändern, war ich verwirrt darüber, wie ich es genau machen sollte. Ich werde es jetzt in das Update bringen – Corey