0

そこでアイソメトリックワールドを作成し、WASD キーを使用するとワールドがスクロールするようにしました。今私がやったことは、プレイヤーではなく、プレイヤーの動きに従って実際にすべての世界を動かすことです。これは良い方法ですか?世界の左上(左上のみ)でタイルがグリッチと点滅を開始するという奇妙なグラフィックスのグリッチがいくつかあります...私はGraphics2Dを使用しています..

これが私がやっている方法です: シフター自体:

public void checkForShift(Player p, World world, GameWindow win) {
    //X MOVING

    if (p.getEnty().getX()>win.getWidth()/2) {
        if (p.getEnty().getX()<world.getWidth()-win.getWidth()/2) {
            temp = (p.getEnty().getX()-win.getWidth()/2);
            world.subSWidth(temp);
            world.subWidth(temp);
            world.updateShift(1, temp);
        }
    }
    if (p.getEnty().getX()<win.getWidth()/2) {
        if (p.getEnty().getX()>world.getSwidth()+win.getWidth()/2) {
            temp = (p.getEnty().getX()-(world.getSwidth()+win.getWidth()/2));
            world.addSWidth(temp);
            world.addWidth(temp);
            world.updateShift(2, temp);
        }
    }
    //Y MOVING
    if (p.getEnty().getY()>win.getHeight()/2) {
        if (p.getEnty().getY()<world.getHeight()-win.getHeight()/2) {
            temp = (p.getEnty().getY()-win.getHeight()/2);
            world.subSHeight(temp);
            world.subHeight(temp);
            world.updateShift(3, temp);
        }
    }
    if (p.getEnty().getY()<win.getHeight()/2) {
        if (p.getEnty().getY()>world.getSheight()+win.getHeight()/2) {
            temp = (p.getEnty().getY()-(world.getSheight()+win.getHeight()/2));
            world.addSHeight(temp);
            world.addHeight(temp);
            world.updateShift(4, temp);
        }
    }
}

世界:

public void updateShift(int operation, int amount) {
    for(Entity e:ListManager.entityList) {
        e.updateShift(operation, amount);
    }
    for (Chunk c : this.getChunkList()) {
        for (Tile t : c.getTileList()) {
            t.updateShift(operation, amount);
        }
    }
}

実在物:

public void updateShift(int operation, int amount) {
    if (operation == 1) {
        SubX(amount);
    } else if (operation == 2) {
        AddX(amount);
    } else if (operation == 3) {
        SubY(amount);
    } else {
        AddY(amount);
    }

}

タイル:

public void updateShift(int operation, int amount) {
    if (operation == 1) {
        SubX(amount);
    } else if (operation == 2) {
        AddX(amount);
    } else if (operation == 3) {
        SubY(amount);
    } else {
        AddY(amount);
    }
}

だから私は2つの質問があります.これはこれを行う良いパフォーマンス効率の良い方法ですか? 奇妙なグリッチを修正するにはどうすればよいですか?ここにビデオがあります:

http://youtu.be/YUn5xCeBInM

4

1 に答える 1

0

私の回答は少しずれているかもしれませんが、libgdxとその IsometricMapサンプルに興味があるかもしれません。

于 2012-05-11T11:11:14.523 に答える