Таким образом, я гуглил/дребезжал попытку найти ответ на этом, но пробелах составления. Если я хочу иметь тип уровня игры с различными активами для каждого уровня, делают я делаю что-то как
public class Level:DrawableGameComponent
{
}
//somewhere inside functions or w.e
var Level = new Level(this,"Level1");
Components.Add(Level));
//Player wins Level
Components.Remove(Level));
Level = new Level(this,"Level2");
Components.Add(Level);
Это, как это сделано, я посмотрел на Набор Платформера, который находится в XNA 3.1 и для класса Уровня, если они не реализовали DrawableGameComponent и решенный для имитации той же функциональности.
Это способ, и это прекрасный способ использовать DrawableGameCompenents. Но это не единственный или лучший способ. Нет ничего плохого в таком подходе к вашим уровням. И если вы собираетесь использовать DrawableGameComponents, определенно лучше использовать их на более высоком уровне (например, для уровней), например, сделайте каждый персонаж и плитку на вашем экране DrawableGameComponent.
Я лично никогда их не использую, как и Platformer Kit, который я предпочитаю, просто для создания собственных классов и имитации того, что делает DrawableGameComponent. Но один способ не обязательно лучше другого.
Также в качестве примечания, хотя StackOverflow - фантастический сайт для вопросов и ответов, вы все равно получите самые быстрые и лучшие ответы на вопросы на форумах XNA. Там фантастические участники, и часто разработчики фреймворка Microsoft XNA сами бросаются отвечать на вопросы.
Часто проще избежать использования DrawableGameComponent
для «игрового процесса», чтобы вы могли лучше контролировать, когда что-то отрисовывается / загружается.
Для «уровней» это немного больше границы.
Первое, что приходит на ум, - это то, что [Edit: на самом деле порядок инициализации немного отличается, я думаю - вам придется проверить себя.] DrawableGameComponent.LoadContent ()
вызывается только из Game.LoadContent ()
. Таким образом, вам придется вызывать его вручную при переключении уровней (то же самое касается UnloadContent ()
).
(Вдумайтесь, если все ваши уровни имеют отдельный контент, вы можете рассмотреть предоставляя каждому свой собственный ContentManager
, так что вы можете использовать Unload ()
только для содержимого этого уровня.)
В любом случае вам придется выполнить несколько вызовов вручную. Так что на самом деле в этом разница между реализацией DrawableGameComponent
и добавлением его в список компонентов, а также наличием уровня в качестве члена вашего игрового класса и вызовом его Draw ()
и ] Update ()
функционирует самостоятельно. Особой разницы нет, но лично я бы выбрал последнее.