2

Java slick を使用して、基本的な状態ベースのゲームを作成しようとしています。私のステージの 3 つは正常に動作しますが、何らかの理由で、状態取得メソッドを呼び出すと、他の 5 つのステージで null ポイント例外が発生します。すべての状態は同じ方法で初期化され、ゲームに追加されます。ロード ゲーム (動作状態の 1 つ) の実際のコードは、クラス名を除いてすべての壊れたものとまったく同じです。私はこれを1日かそこら見てきましたが、わかりません。どんな助けも素晴らしいでしょう。ありがとう。

これは私のゲームクラスのコードです - 私のメインメソッドを含みます

package javagame.states;


import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.StateBasedGame;

public class Game extends StateBasedGame{

public static final String gamename = "An OOP Adventure";
public static final int menu = 0;
public static final int play = 1;
public static final int new_game = 2;
public static final int load_game = 3;
public static final int char_select = 4;
public static final int item_found = 5;
public static final int monster_fight = 6;
public static final int inventory = 7;



public Game(String gamename){
  super(gamename);
  this.addState(new Menu(menu));
  this.addState(new Play(play));
  this.addState(new Newgame(new_game));
  this.addState(new Loadgame(load_game));
  this.addState(new Charselect(char_select));
  this.addState(new Itemfound(item_found));
  this.addState(new Monsterfight(monster_fight));
  this.addState(new Inventory(inventory));

}
/*
 */
public void initStatesList(GameContainer gc) throws SlickException{
   this.getState(menu).init(gc, this);
   this.getState(play).init(gc, this);
   this.getState(load_game).init(gc, this);


   //broken states
   this.getState(new_game).init(gc, this);
   this.getState(item_found).init(gc, this);
   this.getState(char_select).init(gc, this);
   this.getState(monster_fight).init(gc, this);
   this.getState(inventory).init(gc, this);
   //end broken states
   this.enterState(menu);
}

public static void main(String[] args) {
   AppGameContainer appgc;
   try{
      appgc = new AppGameContainer(new Game(gamename));
      appgc.setDisplayMode(640, 360, false);
      appgc.start();
   }catch(SlickException e){
      e.printStackTrace();
   }
}

}

これはすべての壊れたクラスのコードです:

 package javagame.states;

 import org.newdawn.slick.GameContainer;
 import org.newdawn.slick.Graphics;
 import org.newdawn.slick.SlickException;
 import org.newdawn.slick.state.BasicGameState;
 import org.newdawn.slick.state.StateBasedGame;

 public class Newgame extends BasicGameState{


    public Newgame(int state){
    }

    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{

    }

    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{

    }

    public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException{

    }

    public int getID(){
       return 3;
    }
 }
4

1 に答える 1

1

Load game (動作状態の 1 つ) のコードは、クラス名を除いて、すべての壊れたものとまったく同じです。

すべての壊れたステート クラスと Loadgame クラスが返されgetID() == 3ます。GameコンストラクターのみがLoadgame状態として登録されますid == 3-他のものは無視されるため、登録されません。のような ID で登録された州がなかったため、initStatesList()他の州のクラスは見つかりません4, 5, 6, 7

次のように、すべての壊れた状態クラス (Loadgame を含む) を修正します。

public class Newgame extends BasicGameState{ private int state; // !!!

public Newgame(int state){
    this.state = state; // !!!
}

...

public int getID(){
   return this.state; // !!!
}

}

于 2013-02-05T18:17:03.763 に答える