У меня есть класс под названием 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 говорится, "Получают или устанавливают...", таким образом, я не вижу, почему это не работает.
Проблема в том, что ballSprite.Position
возвращает структуру, поэтому, когда вы обращаетесь к ней, она создает ее копию из-за семантики значения. ++ пытается изменить это значение, но это будет изменение временной копии, а не фактической структуры, хранящейся в вашем Sprite.
Вы должны взять значение из чтения Position и поместить его в локальную переменную, изменить эту локальную переменную, а затем назначить локальную переменную обратно в Position, или использовать другой, похожий способ сделать это (возможно, скрыть его как некоторый метод IncrementX
).
Vector2D v;
v = ballSprite.Position;
v.X++;
ballSprite.Position = v;
Другим, более общим решением может быть добавление еще одного Vector2 в вашу позицию. Оператор + перегружен, поэтому вы можете создать новый вектор с желаемым изменением, а затем добавить его к вектору вместо того, чтобы обновлять отдельные компоненты по одному.
Вы можете сделать
Position = new Vector2(Position.X + 1, Position.Y );
или
Position += new Vector2( 1.0f, 0.0f );
или
Position.X += 1.0f;