2013-04-14 16 views
-4

我試圖弄清楚這一點,但一直未能如此。無法隱式轉換類型intBaseStats.Stat獲取錯誤字段`BaseStats.baseStats.hp'必須在控制權離開構造函數之前完全分配

using UnityEngine; 
using System.Collections; 

public class BaseStats : MonoBehaviour { 

    public struct baseStats { 
    public string name; 
    public int level; 
    public Stat hp; 
    public int ap; 

    public int strength; 
    public int toughness; 
    public int agility; 
    public int intelligence; 
    public int willPower; 
    public int luck; 

    public int attack; 
    public int hitPercentage; 
    public int defence; 
    public int evasionPercentage; 
    public int abilityAttack; 
    public int abilityDefence; 
    public int abilityDefencePercentage; 

    public int exp; 

     public baseStats(string Name, int Level, int Hp, int Ap, int Strength, int Toughness, int Agility, int Intelligence, int WillPower, int Luck, int Attack, int HitPercentage, int Defence, int EvasionPercentage, int AbilityAttack, int AbilityDefence, int AbilityDefencePercentage, int Exp) { 
      name = Name; 
      level = Level; 
      hp = Hp; 
      ap = Ap; 

      strength = Strength; 
      toughness = Toughness; 
      agility = Agility; 
      intelligence = Intelligence; 
      willPower = WillPower; 
      luck = Luck; 

      attack = Attack; 
      hitPercentage = HitPercentage; 
      defence = Defence; 
      evasionPercentage = EvasionPercentage; 
      abilityAttack = AbilityAttack; 
      abilityDefence = AbilityDefence; 
      abilityDefencePercentage = AbilityDefencePercentage; 

      exp = Exp; 

     } 
    } 

    public class Stat { 
     int current; 
     int max; 
    } 

    void Start() { 

     baseStats mainChar = new baseStats( 
      "Truth", 
      99, 
      9999, 
      999, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      100, 
      255, 
      255, 
      100, 
      7777777); 

     print(mainChar.level); 

    } 
} 

我試圖讓HP在那裏有一個電流和最大,這是本教程是怎麼教我。不幸的是,教程是unityscript而我想做我的編碼在C#和

回答

0

問題的更好的是,你傳遞一個intHp)通過構造函數,你把它分配給Stat型(hp)變量:

hp = Hp; 

構造函數更改爲:

public baseStats(string Name, int Level, Stat Hp /*...*/){ 
    //... 
} 

編輯:

參數#3' 不能轉換INT '表達鍵入BaseStats.Stat' 和最好重載方法匹配 BaseStats.baseStats.baseStats(字符串,整數,BaseStats.Stat,INT,INT, INT, INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT)」有 一些無效參數

你的第二個問題是,改變構造,你也必須通過正確的對象到構造函數:

baseStats mainChar = new baseStats( 
      "Truth", 
      99, 
      9999, //It's an int and you have to pass an object of type Stat 
      999, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      100, 
      255, 
      255, 
      100, 
      7777777); 

將其更改爲:

Stat myStat = new Stat(); //create the object needed 

baseStats mainChar = new baseStats( 
      "Truth", 
      99, 
      myStat, //pass it! 
      999, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      255, 
      100, 
      255, 
      255, 
      100, 
      7777777); 
+0

好吧我把int Hp改爲Stat Hp,現在得到參數'#3'不能將'int'表達式轉換成'BaseStats.Stat'類型,並且爲BaseStats.baseStats.baseStats(string,int,BaseStats。 int,int,int,int,int,int,int,int,int,int,int,int,int,int)有一些無效的參數 – user2279258

+0

好的,我編輯了我的答案。 –

+0

謝謝!現在我將如何添加當前和最大Hp的實際數量。 PS擺脫了錯誤! – user2279258

2

在構造函數中要分配:

hp = Hp; 

如果你的參數HPint類型和你定義了你的領域hpStat

public Stat hp; 

那就是你所得到的是錯誤的原因,我相信你想定義字段int爲好。另外,作爲一個側面說明,如果你遵循.Net naming conventions

+0

所以,我會定義惠普還統計d:謝謝你這麼多! – user2279258

+0

@ user2279258,或者您可以將您的字段定義爲「int」類型,這取決於您的要求。但從調用看來你是passig它一個整數 – Habib

+0

我如何將stat傳遞給hp,以便hp具有當前值和最大值,如果我將hp定義爲int?非常感謝你! – user2279258

0

首先Stat應該是Enum按照使用你提供的,而不是一個class -

public enum Stat 
{ 
    int current; 
    int max; 
} 

這是類型轉換的問題。分配前

public baseStats(string Name, int Level, Stat Hp, ....) 

或者強制轉換它枚舉(統計) - - 無論是傳遞參數爲ENUM(STAT)

hp = (Stat)Hp; 
+1

不幸的是,由於「Stat」被定義爲'class'而不是'enum',因此不可能進行轉換。 –

+0

哦,我明白了。我沒有注意到這一點。這應該是枚舉,而不是按照它的用法。 –

+0

我看到很生病試着改變類以枚舉也澄清,即時跟隨一個unityscript嘖嘖試圖將其轉換爲C#和他定義他的統計作爲一個類,這樣也許我出錯了...謝謝大家的幫助,所以許多!!! – user2279258

相關問題