2014-01-25 8 views
0

У меня возникли проблемы с выбором способа реализации моего кода для рисования прямоугольника столкновения. Какова наилучшая практика для этого. Это нормально, чтобы создать экземпляр нового прямоугольника на каждом drawcall с правильным размером и расположением, как это:Создание экземпляра нового объекта или изменение значений существующего объекта C#

public void Draw(SpriteBatch spriteBatch) 
     { 
      Rectangle topLine = new Rectangle(CollisionRect.X, CollisionRect.Y, CollisionRect.Width, 1); 
     } 

Или лучше, чтобы создать прямоугольник в моих полях, а затем просто изменить значение уже существующего объект в мой метод вытягивания, как это, несмотря на то, что код собирается быть более «грязный»

public void Draw(SpriteBatch spriteBatch) 
{ 
    topline.Height = 1; 
    topline.Width = CollisionRect.Width; 
    topline.X = CollisionRect.X; 
    topline.Y = CollisionRect.Y; 

} 
+0

Сколько прямоугольников мы говорим? Собираетесь ли вы повторять одно и то же снова и снова? –

+0

Мы говорим о 4 прямоугольниках и да, он будет работать все время в игре –

ответ

0

Я бы выбрал первый вариант. Если topLine больше не требуется после метода Draw, он должен идеально идти как «локальная переменная».

У вас должно быть поле, только если вам это нужно после использования метода Draw.

+1

@Downvoter позаботится о комментариях –

-1

Я хотел бы сделать второй, поэтому меньше работы для GC. Но если у вас есть время, нарисуйте несколько 1000 с первым, а затем вторым. Проверьте, была ли производительность, которую вы выиграли, для проблемы беспорядка :-)

+0

Можете ли вы объяснить меньше работы для GC? –

+0

Да. Если вы создаете новые объекты, не выпуская их, вы позже дадите работу сборщику мусора, что может повлиять на производительность. Не знаю, является ли создание прямоугольников огромной проблемой. Я бы сделал проверку производительности. –

+0

Я не согласен с тем, что GC окажет влияние на производительность. В любом случае, я не ответил на ваш ответ. –

Смежные вопросы