簡體   English   中英

Java / Libgdx自動平鋪

[英]Java/Libgdx auto tile

我目前正在開發一款小游戲,由於我只有一些牆作為砌塊,所以我真的想實現自動平鋪。 但是該怎么做呢? 我還沒有找到任何針對它的教程,只是針對游戲玩家的,但是在Java上不起作用:/

我已經試圖找到一個街區的鄰居,而不是改變它的樣式,但是我想我還需要尋找角落的鄰居? 那正確嗎 ?

有誰知道如何實施這樣的機制? :)

- - - - - - -編輯 - - - - - - -

因此,我看了Wiki和Ze Rubeus的一些教程,以為可以解決這個問題,但還有一個問題:

牆問題

它可以工作,當一個塊碰到另一個塊時,但是一旦有四個塊的塊,它將不再起作用。 通常,當一個街區被一個左鄰居,一個右鄰居和一個在下的鄰居包圍時,它的右下角和左下角也有一個角,因此它應該繪制其他圖像,因此您可以在左右部分看到它。順便說一句,值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沒有為您自動生成圖塊的功能,相反,您必須實現owen算法來執行此類操作。

我建議您閱讀官方WIKI中的節,這里還有一個示例 ,它提供了以編程方式生成的tilemap這里是一個爐排教程,介紹了如何創建可以生成為LIBGDX的程序生成的地牢洞穴系統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM