私はScene2DとTiledでLibGDXを使用して2Dゲームを作成しています。私は、オブジェクトレイヤーを読み込んでゲームにロードするクラスを持っています(これはまだシングルトンにするかどうかを決定しています)。問題は、すべてが更新されるクラスでは、更新を分割して2つのクラスにレンダリングしたいので、public static Stage stage
があり、静的でないようにしたいと考えています。静的変数を削除するにはどうしたら、変数を引き続きグローバルに呼び出すことができますか?
私は、 のプレイヤーとモンスターを含むMobクラスを持っており、ゲーム内のすべてのオブジェクトを にして衝突をチェックするにはステージクラスが必要です。
私のMobクラスでは、それは抽象クラスであり、呼び出されるたびにプレーヤクラスのステージに置かなければならないので、コンストラクタにStageをパラメータとして追加するとは思っていません。
私はあなたがウィザードではないことを知っているので、追加情報が必要な場合は、私はできるだけ早くそれを置くでしょう。私はここで働いている3つのクラス、TiledMapHelperクラス、WorldControllerクラス、Mobクラスを持っています。
以下は、作成したレベルをTiledで私のゲームのコード化可能なオブジェクトに変換するクラスです。静的ArrayListsはステージクラスに実装されるGroupクラスに変更されます。ステージクラスは、ゲーム内のすべてのオブジェクトを保持します。
public class TiledMapHelper {
public static final int TILE_WIDTH = 512;
public static final int MAP_WIDTH = 39 * TILE_WIDTH;
public static final int MAP_HEIGHT = 45 * TILE_WIDTH;`
public static ArrayList<Platform> platforms;
public static ArrayList<Wall> walls;
public static ArrayList<Door> doors;
public static ArrayList<Stair> stairs;
public static ArrayList<Ladder> ladders;
private TiledMap tiledMap;
public TiledMapHelper(TiledMap tiledMap) {
this.tiledMap = tiledMap;
initWalls();
initGates();
initPlatforms();
}
public void initWalls() {
walls = new ArrayList<Wall>();
MapObjects layerObjects = tiledMap.getLayers().get("walls").getObjects();
for (MapObject mapObject : layerObjects) {
if (mapObject instanceof RectangleMapObject) {
Rectangle rect = ((RectangleMapObject) mapObject).getRectangle();
Wall wall = new Wall(rect.x, rect.y, rect.width, rect.height);
walls.add(wall);
}
}
}
public void initGates() {
doors = new ArrayList<Door>();
stairs = new ArrayList<Stair>();
ladders = new ArrayList<Ladder>();
MapObjects layerObjects = tiledMap.getLayers().get("gates").getObjects();
for (MapObject mapObject : layerObjects) {
if (mapObject instanceof TiledMapTileMapObject) {
if (mapObject.getName() == null)
continue;
if (mapObject.getName().equals("Door")) {
int checkDoorType = Integer.parseInt((String) mapObject.getProperties().get("doorType"));
if (checkDoorType == 1) {
Door door = new Door(((TiledMapTileMapObject) mapObject).getX(),
((TiledMapTileMapObject) mapObject).getY(), "door1C");
doors.add(door);
}
if (checkDoorType == 2) {
Door door = new Door(((TiledMapTileMapObject) mapObject).getX(),
((TiledMapTileMapObject) mapObject).getY(), "door2C");
doors.add(door);
}
}
}
if (mapObject instanceof RectangleMapObject) {
Rectangle rect = ((RectangleMapObject) mapObject).getRectangle();
if (mapObject.getName().equals("Stair")) {
String checkStairType = (String) mapObject.getProperties().get("isStair");
if (checkStairType.equals("upRight")) {
Stair stair = new Stair(rect.x, rect.y, rect.width, rect.height, "upRight");
stairs.add(stair);
}
if (checkStairType.equals("upLeft")) {
Stair stair = new Stair(rect.x, rect.y, rect.width, rect.height, "upLeft");
stairs.add(stair);
}
if (checkStairType.equals("downRight")) {
Stair stair = new Stair(rect.x, rect.y, rect.width, rect.height, "downRight");
stairs.add(stair);
}
if (checkStairType.equals("downLeft")) {
Stair stair = new Stair(rect.x, rect.y, rect.width, rect.height, "downLeft");
stairs.add(stair);
}
}
if (mapObject.getName().equals("Ladder")) {
String checkLadderType = (String) mapObject.getProperties().get("isLadder");
if (checkLadderType.equals("up")) {
Ladder ladder = new Ladder(rect.x, rect.y, rect.width, rect.height, "up");
ladders.add(ladder);
}
if (checkLadderType.equals("down")) {
Ladder ladder = new Ladder(rect.x, rect.y, rect.width, rect.height, "down");
ladders.add(ladder);
}
}
}
}
}
public void initPlatforms() {
platforms = new ArrayList<Platform>();
MapObjects layerObjects = tiledMap.getLayers().get("platforms").getObjects();
for (MapObject mapObject : layerObjects) {
if (mapObject instanceof TiledMapTileMapObject) {
if (mapObject != null) {
String checkPlatformType = (String) ((TiledMapTileMapObject) mapObject).getTile().getProperties().get("platformType");
if (checkPlatformType.equals("left")) {
Platform platform = new Platform(((TiledMapTileMapObject) mapObject).getX(),
((TiledMapTileMapObject) mapObject).getY(), "left");
platforms.add(platform);
}
if (checkPlatformType.equals("middle")) {
Platform platform = new Platform(((TiledMapTileMapObject) mapObject).getX(),
((TiledMapTileMapObject) mapObject).getY(), "middle");
platforms.add(platform);
}
if (checkPlatformType.equals("right")) {
Platform platform = new Platform(((TiledMapTileMapObject) mapObject).getX(),
((TiledMapTileMapObject) mapObject).getY(), "right");
platforms.add(platform);
}
}
}
}
}
}
あなたは正しいです、私は自分自身にいくつかの解決策を与えています。私はちょうど私のコードを整理することに問題があると思う。私は衝突を追加するまで、すべてがスムーズに動いていた。それを追加するには2週間ほどかかりましたが、ちょっとした変更を加えるためにコードをリッピングするのに疲れています。これがこの問題を引き起こしたのですが、この小さな静的変数のコードを一括して変更する必要があります。あなたの返事をありがとう、私はそれを自分自身を理解することができる場合は表示されます。 – Denfeet