2 回答

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果您知道傳遞給該方法的參數(shù)是一個(gè)MovementTaken實(shí)例,則可以將其向下轉(zhuǎn)換:
public void activateMovement(ActionTaken toActivate)
{
MovementTaken casted = toActivate as MovementTaken;
// Do something with casted.targetTileH and/or caster.targetTileV

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
Abstract類的優(yōu)點(diǎn)是定義基本實(shí)現(xiàn),或強(qiáng)制派生類型進(jìn)入實(shí)現(xiàn)細(xì)節(jié):
public abstract class ActionTaken : MonoBehaviour
{
public char Type { get; protected set; }
public Transform Target { get; }
// base ctor
protected ActionTaken(Transform target)
{
Type = '\0';
Target = target;
}
// Force implementation onto sub class
public abstract void Activate();
}
public class MovementTaken : ActionTaken
{
public int TileH { get; set; }
public int TileV { get; set; }
public MovementTaken(Transform target, int tileH, int tileV)
: base(target)
{
Type = 'M';
TileH = tileH;
TileV = tileV;
}
public override void Activate()
{
//some code using TileH and TileV
}
}
因此,您的調(diào)用代碼將是:
Queue<ActionTaken> actionTaken;
public void activateMovement(ActionTaken action)
{
action.Activate();
}
我也不確定Type它的用途,但如果你仍然需要它,最好在每個(gè)類中定義一個(gè)常量,ActionTaken如果你有更多的話。
如果你最終Queue<ActionTaken>用各種派生的運(yùn)動(dòng)類型填充你的,這可能是有意義的。否則,您的ActivateMovement方法可能最終會(huì)成為一個(gè)冗長的switch聲明。
接口在這里也可能是有利的:
public interface IActionTaken
{
Transform Target { get; }
void Activate();
}
然后您將替換您的隊(duì)列: Queue<IActionTaken> Actions
調(diào)用隊(duì)列中所有動(dòng)作的代碼可以非常簡單:
while(Actions.Count > 0)
{
IActionTaken current = Actions.Dequeue();
current.Activate();
}
- 2 回答
- 0 關(guān)注
- 145 瀏覽
添加回答
舉報(bào)