ローカル変数を使用する必要がありますが、タイマーに使用すると(条件が満たされるまで時間を短縮します)、機能しません
for (int i = 0; i < Weapons.Count; i++)
{
if (Weapons[i].ItemType == 6)
{
if (standard.IsKeyDown(Keys.G))
{
Cannons.Add(new CannonFire(this));
}
}
else if (Weapons[i].ItemType == 7)
{
float Recharge = Weapons[i].Laser.Rate;
Recharge -= (float)gametime.ElapsedGameTime.Seconds;
if (standard.IsKeyDown(Keys.G) && Recharge < 0)
{
laser.Add(new LaserFire(this, new Vector3(Weapons[i].Laser.range, 1, 1) ));
Recharge = Weapons[i].Laser.Rate;
}
}
}
他の関連するコードは、imがレートを取得する場所です
public class LaserItem
{
float Damage;
float Range;
float Last;
float RechargeRate;
public float damage
{
get { return Damage; }
set { Damage = value; }
}
public float Rate
{
get { return RechargeRate; }
set { RechargeRate = value; }
}
public float Life
{
get { return Last; }
set { Last = value; }
}
タイマーがなくても動作しますが、誰かがキーを押すたびに300個のレーザーを作成したくないので、そのようにすることはできません。私が知る限り、タイマーはフレームごとにレーザーレートに設定されているため、0に達することはありません(このセクションは更新機能にあります)
このコードでは問題ありませんが、ループで必要な場合はローカル変数を使用する必要があります。