Не может изменить Векторные компоненты XNA

У меня есть класс под названием Sprite, и ballSprite является экземпляром того класса. Sprite имеет свойство Vector2 под названием Положение.

Я пытаюсь увеличить X компонентов Вектора как так:

ballSprite.Position.X++;

но это вызывает эту ошибку:

Cannot modify the return value of 'WindowsGame1.Sprite.Position' because it is not a variable

Разве не возможно установить компоненты как это? В подсказке для полей X and Y говорится, "Получают или устанавливают...", таким образом, я не вижу, почему это не работает.

8
задан Matthew H 28 March 2010 в 21:43
поделиться

2 ответа

Проблема в том, что ballSprite.Position возвращает структуру, поэтому, когда вы обращаетесь к ней, она создает ее копию из-за семантики значения. ++ пытается изменить это значение, но это будет изменение временной копии, а не фактической структуры, хранящейся в вашем Sprite.

Вы должны взять значение из чтения Position и поместить его в локальную переменную, изменить эту локальную переменную, а затем назначить локальную переменную обратно в Position, или использовать другой, похожий способ сделать это (возможно, скрыть его как некоторый метод IncrementX ).

Vector2D v;
v = ballSprite.Position;
v.X++;
ballSprite.Position = v;

Другим, более общим решением может быть добавление еще одного Vector2 в вашу позицию. Оператор + перегружен, поэтому вы можете создать новый вектор с желаемым изменением, а затем добавить его к вектору вместо того, чтобы обновлять отдельные компоненты по одному.

13
ответ дан 5 December 2019 в 10:02
поделиться

Вы можете сделать

 Position = new Vector2(Position.X + 1, Position.Y );

или

 Position += new Vector2( 1.0f, 0.0f );

или

 Position.X += 1.0f;
2
ответ дан 5 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: