Как сказал Тобиас, вам, вероятно, следовало бы разместить это на сайте Game Dev, и у вас, похоже, только один экземпляр Asteroid
.В объекте Game1 вы объявляете и создаете экземпляр объекта Asteroid
.Затем в методе обновления вы добавляете его повторно в objectList
.Чтобы получить то, что, я думаю, вам нужно, вы должны изменить
Asteroid asteroid = new Asteroid();
на
Asteroid asteroid;
Затем измените
for (int i = 0; i < 30; i++)
{
objectList.Add(asteroid);
}
на
for (int i = 0; i < 30; i++)
{
asteroid = new Asteroid();
objectList.Add(asteroid);
}
В своем исходном коде вы объявляете и создаете экземпляр asteroid
как определенный Asteroid
, но затем никогда не меняете его.Таким образом, во всей программе asteroid
указывается на один конкретный случай Asteroid
.Затем вы несколько раз добавляете asteroid
в список объектов.Таким образом, после каждого кадра 30 новых ссылок на один и тот же объект asteroid
добавляются к objectList
, а методы Update()
и Draw()
вызываются на asteroid
для каждой ссылки на него в objectList
.Таким образом, после 30 кадров, одной секунды, если скорость 30FPS, до 900 ссылок на один и тот же точный объект asteroid
находятся в objectList
, и в этом 30-м кадре asteroid
вызывает свои методы Update()
и Draw()
до 900 раз.Я почти уверен, что это источник твоего отставания.Выполнение указанных выше корректировок приведет к заполнению objectList
до 900 различных Asteroid
с, но, безусловно, также будет наблюдаться отставание.Вам также нужно добавить ограничение на количество астероидов на экране в любой момент времени (длина objectList
может составлять только x количество) и / или уменьшить количество астероидов, создаваемых каждый раз.Я бы предположил, что что-то вроде
for (int i = 0; i < 5; i++)
{
if (objectList.Count < 50) // Maximum asteroids on screen
{
asteroid = new Asteroid();
objectList.Add(asteroid);
}
}
приведет только к пяти новым астероидам за время и максимум 50 в любой момент времени.Однако, если вы добавите функциональность для уничтожения астероидов, вам придется помнить об их удалении из objectList
.
РЕДАКТИРОВАТЬ. Как сказал Neomex, ваш рисунок также является проблемой.Я бы посоветовал ознакомиться с докладом GDC 2008 о производительности XNA Framework здесь: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6082 В нем очень кратко описаны некоторые характеристики рисования и расчетов, а также то, что вы должны / не должны делать.
EDIT2- Фактическииз-за вашей случайной вероятности это будет до 900 ссылок на объекты и вызовов, а не целых 900.