3

私はJavaから来て、C#スクリプトを取り上げています。この問題は、約2日間発生し、解決策を探しています。クラスをインスタンスなどに設定してみました。これは私が何人かの友人と取り組んでいるミニチュアゲームプロジェクトのためのものです。

いずれにせよ、私はすべての統計ポイントを処理するStatHandler.csを持っています...次に、すべての健康関連のものを処理することになっているHealthManager.csを持っています。

問題は、私が一生の間、次のような変数を呼び出す方法を理解できないことです。

public int stamina, strength, agility, dexterity, wisdom;

StatHandler.csから

私はJavaではそれが同じくらい簡単であることを知っています

maxHealth = StatHandler.stamina * 10;

C#ではそれを行うことはできませんが、インスタンスを作成するときのコードは次のようになります。

maxHealth = StatHandler.instance.stamina * 10;

エラーが発生します

NullReferenceException: Object reference not set to an instance of an object

私もこれを行うことで、継承を試みました

public class HealthHandler : StatHandler {

ただし、HealthHandlerクラスのすべての値を0に設定し、何も読み取りません。


私は本当に他のC#ファイルから変数をプルする方法を理解する必要があります。これは私を遅くしているからです。

4

4 に答える 4

3

実際にはJavaと同じです。非静的変数の場合、クラスインスタンスが必要です。

StatHandler sh = new StatHandler();
maxHealth = sh.stamina * 10;

または、次のようなクラスで変数を静的として宣言できます。

public static string stamina = 10;

そしてそれにアクセスします

maxHealth = StatHandler.stamina * 10;
于 2013-01-13T11:22:16.623 に答える
0

C#では、値型変数を初期化せずに使用することはできません。

StatHandler.instance メソッドのように見えstaticます。int変数を割り当てずに使用することはできません。それらにいくつかの値を割り当てます。

例えば

public int stamina = 1, strength = 2, agility = 3, dexterity = 4, wisdom = 5;
于 2013-01-13T11:22:23.160 に答える
0

NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません

正しく初期化する必要があります。StatHandler.instance静的で初期化されていないようです。

staticコンストラクターで初期化できます

class StatHandler
{

  static StatHandler()
  {
      instance = new Instance(); // Replace Instance with type of instance
  }
}
于 2013-01-13T11:22:23.960 に答える