Ich entwickle gerade ein kleines Spiel und weil ich nur einige Blöcke als Wände habe, möchte ich wirklich Auto Tiling implementieren. Aber wie geht das? Ich habe keine Tutorials dafür gefunden, nur eines für Spielmacher, aber das funktioniert nicht auf Java:/Java/Libgdx Auto Kachel
Ich habe schon versucht, den Nachbarn eines Blocks zu finden, als den Stil ändern, aber ich denke, ich muss auch Suche nach den Ecknachbarn? Ist das richtig ?
Hat jemand eine Idee, wie man solch eine Mechanik einführt? :)
------------- -------------- EDIT
So krank im Wiki geschaut und einige Tutorials von Ze Rubeus, dachte, es wäre gelöst, aber theres ein Problem links:
es funktioniert, wenn ein Block eine andere berührt, aber sobald es einen Block von vier Blöcken, es nicht mehr gewohnt arbeiten. Normalerweise, wenn ein Block von einem linken Nachbarn umgeben ist, ein rechter und ein unterer, hat auch eine Ecke mit dem rechten und linken Boden, als es ein anderes Bild zeichnen sollte, Sie können es im linken und rechten Teil sehen Der Weg, der Wert 2 ist eine Wand. Hier ist, was ich tat:
//------------------------------------------------------------------
//--------------------Checking for all sides------------------------
//------------------------------------------------------------------
// got an under neighbour
directions[2] = copyOfMap[((int) y)-1][(int) x] == 2;
// got an upper neighbour
directions[0] = copyOfMap[((int) y)+1][(int) x] == 2;
// got an left neighbour
directions[1] = copyOfMap[((int) y)][(int) x-1] == 2;
// got an right neighbour
directions[3] = copyOfMap[((int) y)][(int) x+1] == 2;
//------------------------------------------------------------------
//--------------------Checking for corners--------------------------
//------------------------------------------------------------------
corners[0] = copyOfMap[y-1][x+1] == 2 ;
corners[2] = copyOfMap[y-1][x-1] == 2;
corners[3] = copyOfMap[y+1][x-1] == 2;
corners[1] = copyOfMap[y+1][x+1] == 2;
// Right
if(directions[3]){
if(directions[2]){
if(directions[1] && corners[1] && corners[3]){
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(32, 0, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
else{
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(0, 0, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
}
else if(directions[0]){
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(0, 64, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
else{
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(32, 0, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
}
// Left
else if(directions[1]){
if(directions[2]){
if(directions[3] && corners[1] && corners[3]){
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(32, 0, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
else{
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(128, 0, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
}
else if(directions[0]){
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(128, 32, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
else{
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(32, 0, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
}
// Up
else if(directions[0]){
if(corners[2]){
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(0, 32, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
else if(corners[3]){
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(0, 32, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
else{
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(0, 32, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
}
// Down
else if(directions[2]){
region = game.manager.get("DuengonGainersAtlas/DuengonGainersAtlas",TextureAtlas.class).findRegion("Duengon-WallSet");
region.setRegion(0, 32, 32, 32);
wallLayer.add(region, (x*100)/Box2dVars.UNIT, (y*100)/Box2dVars.UNIT,100/Box2dVars.UNIT,100/Box2dVars.UNIT);
}
es Schrieb klar, so wäre es schön, wenn man es aussehen könnte :) einfach die wallLayer.add ignorieren und die Textur Zeug.
hat einen großen Tag ^^
Es gibt ein Spiel Jam-Spiel namens Minicraft, das dies tut und es ist in Java geschrieben. Sie können den Quellcode nachschlagen, um Ideen zu erhalten. – Tenfour04
Danke für deine Antwort :) Schon getan, aber Notch hat das etwas zu kompliziert gemacht – genaray
Hat jemand eine Idee? – genaray