2010-07-28 6 views
1

Donc, j'ai été googling/binging en essayant de trouver une réponse à ce sujet mais en rédigeant des blancs. Si je veux avoir un type de niveau de jeu avec des actifs différents pour chaque niveau que je fais quelque chose commeDrawableGameComponent XNA, Implémentation Droit?

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); 

Est-ce comment il est fait, je regardais le kit Platformer qui est en XNA 3.1 et pour le niveau class à condition qu'ils n'aient pas implémenté le DrawableGameComponent et aient décidé d'imiter la même fonctionnalité.

Répondre

1

C'est un et c'est une bonne façon d'utiliser DrawableGameCompenents. Mais ce n'est pas le seul moyen ou le meilleur moyen. Il n'y a rien de mal à prendre cette approche pour vos niveaux. Et si vous utilisez DrawableGameComponents, il est préférable de les utiliser à un niveau plus élevé (comme pour Levels), puis dites par exemple que chaque caractère et chaque case de votre écran soit DrawableGameComponent.

Personnellement, je ne les utilise jamais, un peu comme le Kit Platformer que je préfère juste créer mes propres classes et imiter ce que le DrawableGameComponent fait. Mais une façon n'est pas nécessairement meilleure que l'autre. De plus, alors que StackOverflow est un site fantastique pour Q & A, vous obtiendrez toujours les réponses les plus rapides et les mieux posées sur les forums XNA. Les membres là-bas sont fantastiques et souvent les développeurs de Microsoft XNA interviennent pour répondre aux questions.

1

Souvent, il est plus facile d'éviter d'utiliser DrawableGameComponent pour des "trucs de gameplay", de sorte que vous avez un meilleur contrôle sur le moment où les choses sont dessinées/chargées.

Pour les "niveaux" c'est un peu plus borderline.

Le premier problème qui vient à l'esprit est que DrawableGameComponent.LoadContent() est seulement appelée depuis Game.LoadContent(). Donc, vous auriez à l'appeler manuellement lors de la désactivation des niveaux (même chose pour UnloadContent()). [Modifier: en fait l'ordre d'initialisation est légèrement différent, je pense - vous devrez vérifier vous-même.]

(Et à bien y penser, si vos niveaux ont tous un contenu distinct, vous pourriez envisager de donner chacun son propre ContentManager, de sorte que vous pouvez utiliser Unload() sur le contenu de ce niveau.)

Vous allez devoir faire des appels manuels quand même. Donc, c'est vraiment la différence entre implémenter DrawableGameComponent et l'ajouter à la liste des composants, et avoir un niveau en tant que membre de votre classe de jeu et en appelant ses fonctions Draw() et Update() vous-même. Il n'y a pas beaucoup de différence, mais personnellement j'irais pour le dernier.