Java/Libgdx 这台电视

Java/Libgdx auto tile

我目前正在开发一个小游戏,因为我只有一些方块作为墙,所以我真的很想实现自动平铺。但是怎么做呢?我还没有找到任何关于它的教程,只有一个是给 gamemaker 的,但是在 java 上不起作用:/

我已经试着找到一个街区的邻居,而不是改变它的风格,但我想我还需要寻找角落的邻居吗?是这样吗?

有人知道如何实现这样的机制吗? :)

------------编辑-------------

所以,我看了维基和 Ze Rubeus 的一些教程,以为可以解决,但还有一个问题:

它可以工作,当一个块接触另一个时,但一旦有四个块,它就不再工作了。通常情况下,当一个方块被左邻居、右邻居和下邻居包围时,右下角和左下角也有一个角,那么它应该绘制另一个图像,你可以在左右看到它 part.By顺便说一下,值2是一堵墙。这是我所做的:

//------------------------------------------------------------------
                    //--------------------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);


                    }                       

写的很清楚,如果你能看一下就好了:)忽略wallLayer.add和纹理的东西。

祝你有愉快的一天^^

Libgdx 没有为您自动生成图块的功能,相反,您必须实现自己的算法才能执行此类操作。

我建议您阅读 this section in the official WIKI, also here is an exemple who provides a programmatically generates tilemap, and here 关于如何创建程序生成的地牢洞穴系统的教程,您可以将其实施到 LIBGDX。