@kodwi
https://moikrug.ru/kodwi

Visual Studio ругается на изменение свойства объекта, которое по ее мнению не является переменной ?

Пишу игру на XNA. В классе Level имеются сущности простенького класса GameElement:

public class GameElement
    {
        private Texture2D texture;

        private Rectangle rectangle;

        public Rectangle ElementRectangle
        {
            set
            {
                if (rectangle != value)
                {
                    rectangle = value;
                }
            }

            get
            {
                return rectangle;
            }
        }

        public Texture2D ElementTexture
        {
            set
            {
                if (texture != value)
                {
                    texture = value;
                }
            }

            get
            {
                return texture;
            }
        }
    }


Часть класса Level:

public class Level
    {
        ...
        private GameElement ball;

        private GameElement platform;

        private GameElement[] blocks;
        ...
        public void HandlingGameLogic()
        {
            if (!is_ball_stopped)
            {
                // пример попытки изменить координаты мяча
 
                // вот здесь студия говорит, что нельзя
                // менять значения ElementRectangle, ибо это не переменная
                // дословно: cannot modify return value of ... because it is not a variable
                ball.ElementRectangle.X += (int)(3.5f);
                ball.ElementRectangle.Y += (int)(3.5f);
            }
            else
            {
            }
        }
        ...
    }


Подскажите - в чем проблема?
  • Вопрос задан
  • 2243 просмотра
Решения вопроса 1
@smozhaykin
Rectangle - это структура, value type. Когда Вы вызываете ball.ElementRectangle, вы получаете не исходный объект, а его копию. Соответственно, пытаясь изменить значения X и Y, вы меняете значения копии, которые никак не скажутся на исходном объекте. Вам нужно сделать следующее:

Rectangle current = ball.ElementRectangle;
current.X += (int)(3.5f);
current.Y += (int)(3.5f);
ball.ElementRectangle = current;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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