在我的游戏中,我使用了一个加电系统,其基本工作原理如下:
- 敌人被杀,有随机几率掉落能量箱
- 拾取能量箱即可获得随机元素
为玩家提供随机加电的代码如下所示......
Type t = RandomManager.PickFromParams<Type>(typeof(PowerupInvincible), typeof(PowerupDoubleFireRate));
ply.AddPowerup<t>();
还有AddPowerup<>()
方法如下:
public void AddPowerup<T>() where T : PowerupEffect, new()
{
var powerup = new T();
powerup.Activate(this);
powerups.Add(powerup);
}
现在,问题是 ply.AddPowerup<t>()
行,因为它提示找不到类型 t:
The type or namespace name 't' could not be found (are you missing a using directive or an assembly reference?)
有谁知道是否有办法解决这个问题,或者如果不可能,请告诉我更好的方法?提前致谢!
最佳答案
听起来您在这种情况下没有正确使用泛型。我假设 PowerupInvincible
和 PowerupDoubleFireRate
继承自某些 PowerupBase
:
PowerupBase powerUp = RandomManager.PickFromParams<PowerupBase>(typeof(PowerupInvincible), typeof(PowerupDoubleFireRate));
ply.AddPowerup(powerUp);
那么方法签名简单需要是:
public void AddPowerup(PowerupBase powerup)
{
powerup.Activate(this);
powerups.Add(powerup);
}
您的随机管理器将负责选择参数之一,实例化它,然后返回实例。
关于C#:关于使用泛型和选择随机类型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7152569/