2016-04-12 12 views
0

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:

Wall problem

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 ^^

+0

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

+0

Danke für deine Antwort :) Schon getan, aber Notch hat das etwas zu kompliziert gemacht – genaray

+0

Hat jemand eine Idee? – genaray

Antwort

1

Libgdx haben keine Funktion zur automatischen Fliesen für Sie generieren, stattdessen müssen Sie Ihre owen algorithme implementieren diese Art von Sachen zu tun.

Ich schlage vor, dass Sie this Abschnitt in der offiziellen WIKI lesen, hier auch ein exemple ist, die ein programmatically generates tilemap bietet, und here ein Rost tutoriel, wie man ein prozedural erstellten Dungeon Höhlensystem erstellen, das Sie Libgdx implementieren können.

+0

Danke für deine schnelle Antwort :) Ich habe meine Antwort aktualisiert, ich würde mich sehr freuen, wenn du meinen Code sehen könntest ^^ - – genaray