#c# #xna #xna-4.0
#c# #xna #xna-4.0
Вопрос:
Итак, у меня есть 2 строки очень похожего кода. Вот первая строка (в которой нет проблем):
Player.Tex = Content.Load<Texture2D>(@"Texturesd");
И вот вторая строка (в которой есть исключение TypeInitializationException)
HealthPickup.Tex = Content.Load<Texture2D>(@"TextureshealthPickup");
В классе Player и классе HealthPickup сразу после открытого класса есть строка с этим:
public static Texture2D Tex;
Итак, почему мой класс HealthPickup вызывает эту ошибку? Я пропустил что-то очевидное? Я пробовал искать исключение, но ничего не помогает.
РЕДАКТИРОВАТЬ: как и было запрошено, мой класс HealthPickup выглядит следующим образом:
Кроме того, мой класс Player:
Обратите внимание, что мой класс HealthPickup идентичен моему классу Player, за исключением 4 переменных (Tex, Dir, Pos и speed в Player и Tex, randX, randY, Pos в HealthPickup)
Комментарии:
1. Какое сообщение об исключении?
2. @48klocs ‘Инициализатор типа для ‘TestGame. HealthPickup «выдал исключение». Это все, что это мне дает.
3. Покажите код для вашего
TestGame.HealthPickup
класса — он явно генерирует исключение в конструкторе или инициализаторе поля.4. @DavidHaney Хорошо, я отредактировал вопрос, чтобы удовлетворить ваш запрос.
5. Хорошо, я нашел проблему. Это была моя попытка случайного размещения карты. Я хотел, чтобы он каждый раз появлялся в случайном месте на карте, но, очевидно, это не сработало. Мне все же нужна помощь в том, как это сделать 🙂
Ответ №1:
Вы пытаетесь преобразовать объект типа Random
в целое число. Это недопустимо. Вы можете получить случайное число из Random
объекта, используя одну из Next
перегрузок метода. Вот так :
(new Random (Guid.NewGuid().GetHashCode())).Next()
использование Guid.NewGuid()...
не обязательно, но гарантирует, что вы получите 2 Random
объекта с разными начальными значениями
Комментарии:
1. Я думал, что генерация случайных чисел, а затем преобразование их в Int32 будут работать. Очевидно, что нет.
2.
Random.Next
метод возвращает случайное целое число, поэтому преобразование не требуется.Random
конструктор инициализирует новый экземплярRandom
класса, который не может быть преобразован в целое число. смотрите Random в MSDN
Ответ №2:
Оказывается, это были эти строки в моем классе HealthPickup:
public static int randX = Convert.ToInt32(new Random(1));
public static int randY = Convert.ToInt32(new Random(1));
public static Point Pos = new Point(randX, randY);
По-видимому, Point() не любит случайные числа, поэтому я изменил его на это:
public static Point Pos = new Point(50, 50);
Проблема решена
Комментарии:
1. На самом деле, преобразование нового
Random
класса в целое число было вашей проблемой.Convert.ToInt32(object)
сбой, когда объект не является целым числом.2. Вам нужно сделать
Random r = new Random
, а затемPoint Pos = new Point(r. Next(0, 50)), randY. Next(0,50));
в настоящее время вы используете одно и то же начальное значение для обоих чисел и не создаете их правильно.