2010-04-21 4 views
2

Je suis toujours nouveau à XNA, alors s'il vous plaît pardonner toute question stupide et les déclarations dans ce post (Le problème supplémentaire est que j'utilise Visual Studio 2010 avec .Net 4.0, ce qui signifie également très peu d'exemples existent sur le web - eh bien, aucun que je pourrais trouver facilement):Texture2D.Bounds.Intersect, mais les Bounds ne bougent jamais? - XNA, .Net 4.0

J'ai deux objets 2D dans un "jeu" que j'utilise pour en savoir plus sur XNA. J'ai besoin de savoir quand ces deux objets se croisent.

J'ai noté que les objets Texture2D ont une propriété nommée "Bounds" qui à son tour a une méthode nommée "Intersects" qui prend un Rectangle (l'autre Texture2D.Bounds) comme argument. Cependant, lorsque vous exécutez le code, les objets se croisent même s'ils se trouvent sur des côtés distincts de l'écran. Quand j'interviens dans le code, j'ai remarqué que pour les Bounds de Texture2D, je récupère 4 paramètres quand tu souris sur les bornes et les coordonnées X, et Y lisent toujours "X = 0, Y = 0" pour les deux objets (donc ils couper). La chose qui me trouble est le fait que la propriété Bounds est sur la Texture plutôt que sur la Position (ou Vector2) des objets. J'ai finalement créé une petite méthode d'assistance qui prend en compte les objets et leurs positions, puis calcule s'ils se croisent, mais je suis sûr qu'il doit y avoir un meilleur moyen.

des suggestions, des pointeurs seraient très appréciés.

Gineer

Répondre

0

J'ai trouvé les tutoriels XNA Creator club basé sur un autre post à Stackoverflow par Ben S. Le tutoriel Collision Series 1: 2D Rectangle Collision explique tout cela.

Il semble que vous deviez créer de nouveaux rectangles, basés sur les rectangles originaux se déplaçant dans le jeu chaque fois que vous essayez d'exécuter la méthode d'intersection, qui contiendra alors les coordonnées X et Y mises à jour. Je ne suis toujours pas sûr pourquoi la position des rectangles d'objet d'origine ne peut pas être simplement tenue à jour, mais si c'est ainsi que cela devrait fonctionner, c'est assez bon pour moi ... pour l'instant. ;-)

1

La propriété Bounds a été ajoutée à la classe Texture2D pour simplifier l'utilisation de Viewports. More here.

Vous ne devriez pas considérer la texture comme étant l'objet lui-même, c'est simplement ce qui retient les données qui sont dessinées à l'écran, qu'elles soient utilisées pour Sprite ou RenderTarget. La position des objets ou des sprites et la façon dont la position/le déplacement est géré dépendent entièrement de vous, vous devez donc suivre et gérer vous-même. Cela inclut la position de toutes les limites.

Le tutoriel 2D Rectangle Collision est un bon début, comme vous l'avez déjà trouvé :)