Я следую учебному пособию по YouTube, и по какой-то причине, даже имея точно такой же код, я получаю исключение:
"Index was out of range. Must be non-negative and less than the size of the collection."
Что я пытаюсь сделать, так это то, что каждый раз, когда я нажимаю на экран, значение i
должно увеличиваться, но это не так.
Код:
Переменные:
public static float PointX, PointY, PhotonX, PhotonY;
public static List<float> PhotonXPOS = new List<float>();
public static List<float> PhotonYPOS = new List<float>();
public static List<float> Percent = new List<float>();
В конструкторе:
Rect Bounds = ApplicationView.GetForCurrentView().VisibleBounds;
//Photon location.
PhotonX = (float)Bounds.Width / 2; //Always at middle.
PhotonY = (float)Bounds.Height; //Always at bottom.
В другом методе:
private void GameCanvas_Draw(Microsoft.Graphics.Canvas.UI.Xaml.CanvasControl sender, Microsoft.Graphics.Canvas.UI.Xaml.CanvasDrawEventArgs args)
{
///Display Projectiles.
for (int i = 0; i < PhotonXPOS.Count; i++)
{
//Start and end point of a projectile.
PointX = (PhotonX + (PhotonXPOS[i] - PhotonX) * Percent[i]);
PointY = (PhotonY + (PhotonYPOS[i] - PhotonY) * Percent[i]);
//Drawing of the Photons.
args.DrawingSession.DrawImage(Scaling.Image(Photon), PointX - (25 * ScaleWidth), PointY - (25 * ScaleHeight));
//Speed.
Percent[i] += (0.050f * ScaleHeight);
//If Photon goes out of screen at the top.
if (PointY < 0f)
{
PhotonXPOS.RemoveAt(i);
PhotonYPOS.RemoveAt(i);
Percent.RemoveAt(i);
}
}
}
В строке дано исключение
PointY = (PhotonY + (PhotonYPOS[i] - PhotonY) * Percent[i]);
Как будто PhotonYPOS[i]
не увеличивается, но остается со начальным значением 0, тогда i
увеличивается и становится выше, чем сам список.
EDIT: этот метод вызывается при нажатии на экран (и элементы добавляются в списки):
public void GameCanvas_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
{
if(RoundEnded == true)
{
GameState = 0;
Countdown = 6;
RoundEnded = false;
}
else
{
//Goes to next level.
if (GameState == 0)
{
//Go to next level.
GameState += 1;
//Start round timer.
RoundTimer.Start();
}
else if(GameState > 0)
{
//Add Photons.
PhotonXPOS.Add((float)e.GetPosition(GameCanvas).X);
PhotonXPOS.Add((float)e.GetPosition(GameCanvas).Y);
Percent.Add(0f);
}
}
}