Méthode qui utilise "SpriteEffects.FlipVertically"

MrMexx Messages postés 8 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 20 mai 2010 - 20 mai 2010 à 09:37
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 - 20 mai 2010 à 20:16
Bonjours à tous, je pense que ma façon de procéder est correcte, seulement rien ne ce passe. Je dois effectuer l'affectation d'un changement de paramètre dans l'affichage d'un sprite ("Droite"), et qui doit normalement effectuer un flip sur l'axe vertical, sous l'effet d'un clic sur un second sprite ("bouton"). Au départ, le sprite "Droite" est affiché sans changement apparent, et doit prendre, après le clic sur le "bouton", SpriteEffects.FlipVertically en paramètre.

---------------------------------------------------------------------------
Dans la classe principale :
---------------------------------------------------------------------------
protected override void Initialize()
{

Droite = new Sprite(new Vector2(600, 100), null, Color.White, 0, new Vector2(66, 49), SpriteEffects.None);

boutonSymetrie = new Sprite(new Vector2(100, 600), null, Color.White, 0, new Vector2(20, 200), SpriteEffects.None);

base.Initialize();

}

protected override void Update(GameTime gameTime)
{

if (MState.LeftButton == ButtonState.Pressed)
boutonSymetrie.symetrie(MState, Droite, SpriteEffects.FlipHorizontally);

base.Update(gameTime);
}

---------------------------------------------------------------------------
Dans le classe Sprite :
---------------------------------------------------------------------------
SpriteEffects effect = SpriteEffects.None;

public SpriteEffects Effect
{
get { return effect; }
set { effect = value; }
}

public Sprite(Vector2 position, Rectangle? sourceRectangle, Color color, float rotation, Vector2 origin, SpriteEffects effect)
{
this.position = position;
this.sourceRectangle = sourceRectangle;
this.color = color;
this.rotation = rotation;
this.origin = origin;
this.effect = effect;
}


public void symetrie(MouseState MState, Sprite formePosDepart, SpriteEffects Effect)
{
if (MState.X >= position.X && MState.X <= (position.X + texture.Width) &&
MState.Y >= position.Y && MState.Y <= (position.Y + texture.Height))
{
formePosDepart.Effect = SpriteEffects.FlipVertically;

}
}

5 réponses

MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
20 mai 2010 à 10:12
Salut,
alors déjà si dans la méthode symetrie il y'a un paramètre SpriteEffects, on va s'en servir donc tu changes cette ligne :

formePosDepart.Effect = SpriteEffects.FlipVertically;


en :

formePosDepart.Effect = Effect;


et enfin où est la méthode Draw qui avec un spritebatch permet d'afficher le sprite avec toutes ses données ?
0
MrMexx Messages postés 8 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 20 mai 2010
20 mai 2010 à 12:15
La voici, j'ai zappé de la mettre ;)

public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(texture, position, sourceRectangle, color, rotation, origin, Vector2.One, effect, 0);
// spriteBatch.Draw(texture, position, sourceRectangle, Color.White, rotation, Vector2.Zero, Vector2.One, SpriteEffects.None, 0);
}

J'ai remplacer la ligne de code par celle que tu m'as indiqué. Rien ne change. Je ne comprend vraiment pas d'ou vient le problème. Je m'aide du Développement XNA en pdf.
0
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
20 mai 2010 à 12:37
OKi la réponse est simple dans la méthode Draw, tu mets SpriteEffects.None, remplace ce terme par effect.
0
MrMexx Messages postés 8 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 20 mai 2010
20 mai 2010 à 19:51
Mince, les deuxième spritebatch.Draw était en commentaire, c'est bien le premier qui est utilisé et donc effect est déjà présent. Cependant, cela peut provenir de l'initialisation du sprite "Droite" dans la classe principale non ? :

Droite = new Sprite(new Vector2(600, 100), null, Color.White, 0, new Vector2(66, 49), SpriteEffects.None);

Bizard pourtant tout à l'air d'être correcte dans la manière de procéder..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
20 mai 2010 à 20:16
Je vais t'envoyer un MP avec mon email. Envoie moi ton projet que je vois de plus près parce que là, c'est un peu difficile de trouver...
0
Rejoignez-nous