C# структура программы.
Делаю 2д игру на XNA 4.0
В данный момент реализация такая: есть 3 класса - игровой мир, объект и игрок. Класс игрового мира содержит одного игрока и массив объектов. Метод, обновляющий положения игрока, должен использовать данные о "мире". В данный момент я из "мира" вызываю метод игрока и передаю ему ссылку. "(Hero.Update(This))" Как ещё можно реализовать? |
Ответ: C# структура программы.
Я бы создал интерфейс GameObject, который будет иметь как минимум два метода: Update и Render.
Далее, World имеет List<GameObject>, естественно в него всё что не наследует GameObject не может находиться. Затем уже в самих классах сущностей, оверлоадишь методы Update и Render, специфично к самой сущности. Затем в World будет два метода Update и Render, которые пробегаются по списку и запускают соответствующий метод. Тем самым мы обновляем всё запуская один метод. И также с рендером. Вот только зачем ты персонажу передаёшь данные о мире, это мне не совсем понятно. По сути персонаж не должен ничего знать о самом мире. Всё что он должен, это обновить себя. |
Ответ: C# структура программы.
Там есть вот такая штука:
http://msdn.microsoft.com/ru-ru/libr...component.aspx Небольшая статейка, правда на английском, зато примеры понятные: http://sharpoverride.hubpages.com/hu...-in-components |
Ответ: C# структура программы.
О твоем вопросе. По сути, есть два способа: либо при создании объектов мира передавать им мир, к которому они принадлежат, либо (как у тебя) передавать мир в соответствующем методе.
Альтернатива, которую любят многие, — это костыль в виде мира, реализующего синглтон. |
Ответ: C# структура программы.
Вопрос косвенно относящийся к теме.
Как лучше делать: обрабатывать нажатия клавиш в главном цикле и в соответствии с необходимостью инициализировать некоторые действия объектов, или передавать объектам в функцию update массив значений состояния клавиш, а он уже пускай сам разбирается? |
Ответ: C# структура программы.
Можно состояния сделать статическим массивом, и никуда не передавать, пусть сами обращаются. А обновлять в основном цикле.
|
Ответ: C# структура программы.
Вопрос, косвенно относящийся к теме.
Допустим у меня есть метод/функция/что-то еще, которая работает с экземпляром некого класса. А у этого класса есть метод, возвращающий переменную. Например, класс image и метод image.get_width(); Если я в своей функции часто обращаюсь к ширине картинки, как лучше поступить - записать это число в локальную переменную, обратившись к методу get_width() только один раз, или вызывать get_width() каждый раз когда мне потребуется это значение? |
Ответ: C# структура программы.
помоему очевидно что первый вариант лучше, не?)
Если конечно по ходу значение get_width() не может измениться и тебе важны эти изменения. Провел эксперимет. Результаты: Первое число это вызов значения через метод по ссылке на класс. Второе число это вызов значения через свойство по ссылке на класс. Третье число это вызов значения через локальную переменную, которой один раз присвоили значение. 50 раз внутри цикла для того чтобы действия по увеличению счетчика цикла не оказывали большое влияние на результаты. |
Ответ: C# структура программы.
Создать Accessor, получающий данное ширины картинки. Ширина картинки - есть int число, приватное значение, которое назначается при изменениях ширины картинки. Например при загрузки картинки, или ещё битмап масштабировании.
Тебе не нужно вычислять каждый раз ширину по самому массиву, делай это когда изменены данные. Если же тебя задаёт вопрос, как лучше - постоянно спрашивать у картинки или спросить один раз в локальную переменную, то как понимаю ты начинаешь загоняться о мелких и не нужных вещах, т.к. это реально мелочи. |
Часовой пояс GMT +4, время: 06:34. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot