[英]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.