2016-08-10 35 views
0

我目前有一個遊戲需要切換「領域」,我需要找到一種方法將Body從一個領域移動到另一個領域。這裏是我正在做它的玩家(每個等級有n個領域和各個領域已經Box2D的身體的)這是級別類:如何將身體從當前世界遷移到另一個

public class Level { 

private Array<Realm> realms; 
private Array<Player> players; 
private Realm currentRealm; 
private int realmIndex = 0; 

InputReciever inputReciever; 
private CollisionReciever collisionReciever; 
public Level(){ 

    realms = new Array<Realm>(); 
    realms.add(new Realm("Realm1")); 
    realms.add(new Realm("Realm2")); 
    currentRealm = realms.get(realmIndex); 

    players = new Array<Player>(); 
    for(Realm realm : realms){ 
     players.add(new Player(new Vector2(2, 3))); 
     players.get(players.size - 1).createBody(realm.getWorld()); 
    } 
    BoxEntity entity = new BoxEntity(new Vector2(2, 1), new Vector2(1, .25f), BodyType.StaticBody); 
    entity.createBody(currentRealm.getWorld()); 

    entity = new BoxEntity(new Vector2(5, 1.75f), new Vector2(1, .25f), BodyType.StaticBody); 
    entity.createBody(currentRealm.getWorld()); 

    entity = new BoxEntity(new Vector2(5.5f, .75f), new Vector2(.5f, .15f), BodyType.StaticBody); 
    entity.createBody(currentRealm.getWorld()); 

    entity = new BoxEntity(new Vector2(7, -1.75f), new Vector2(1, .15f), BodyType.StaticBody); 
    entity.createBody(currentRealm.getWorld()); 

    entity = new BoxEntity(new Vector2(6, -.25f), new Vector2(1, .15f), BodyType.StaticBody); 
    entity.createBody(realms.get(1).getWorld()); 

    entity= new BoxEntity(new Vector2(3, 1), new Vector2(1, .5f), BodyType.StaticBody); 
    entity.createBody(realms.get(1).getWorld()); 

    entity= new BoxEntity(new Vector2(3, -1), new Vector2(1, .25f), BodyType.StaticBody); 
    entity.createBody(realms.get(1).getWorld()); 


    inputReciever = new InputReciever(players.get(realmIndex), this); 
    Gdx.input.setInputProcessor(inputReciever); 

    collisionReciever = new CollisionReciever(); 
    collisionReciever.setPlayer(players.get(realmIndex)); 
    currentRealm.getWorld().setContactListener(collisionReciever); 
} 

private Player tmpPlayer; 
public void switchRealm(){ 
    tmpPlayer = players.get(realmIndex); 
    if(realmIndex < realms.size - 1){ 
     realmIndex ++; 
    }else 
     realmIndex = 0; 


    currentRealm = realms.get(realmIndex); 
    currentRealm.getWorld().setContactListener(collisionReciever); 
    inputReciever.setPlayer(players.get(realmIndex)); 
    //this transforms the player in the list to the position of the original 
    players.get(realmIndex).retainState(tmpPlayer); 
    collisionReciever.setPlayer(players.get(realmIndex)); 
} 

public void render(OrthographicCamera camera){ 
    currentRealm.render(camera); 
} 

public void update(OrthographicCamera camera){ 
    camera.position.set(players.get(realmIndex).getBody().getTransform().getPosition(), 0); 

    currentRealm.update(camera); 

    players.get(realmIndex).update(); 
} 

}

我切換三界的方式導致在studder遊戲,在我繼續之前,這裏是方法「retainState();」對於玩家

public void retainState(Player player){ 
    ((Body) bodyObjects.get(BodyReferences.BODY)).setTransform(player.getBody().getPosition(), player.getBody().getAngle()); 
    ((Body) bodyObjects.get(BodyReferences.BODY)).setLinearVelocity(player.getBody().getLinearVelocity()); 
} 

我的問題是,有沒有辦法放置身體另一個世界的內部無需重新創建它?我使用多個世界,所以我可能會改變rayhandler效果和關卡編輯器,所以基本上,我需要在多個世界中做到這一點。

問題:有沒有方法可以將身體從一個世界移動到另一個世界而無需使用位過濾?

我完全瞭解位過濾,但這是我開發團隊設置UML的方式,所以我必須按照我現在最好的設計來設計,謝謝。

回答

0

我不推薦collision filteringgroups。改變一個組只是改變一個參數,而不是將整個身體從一個世界複製到另一個世界,我期望它更高效。

當您只有 需要禁用同一類別的對象之間的衝突時,才應該使用組而不是類別和掩碼。

相關問題