2016-07-04 1 views
0

tout le monde Hy, donc d'abord tout, voici l'image de mon sprite: enter image description heremouvement sprite XNA a mal tourné

Je mis à l'échelle vers le bas dans mon jeu si son pas grand dans le jeu.

De toute façon mon résultat souhaité du code ci-dessous:

protected override void Update(GameTime gameTime) 
    { 
     // Allows the game to exit 
     if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) 
      this.Exit(); 

     spritePos = spriteVelocity + spritePos; 
     spriteR = new Rectangle((int)spritePos.X, (int)spritePos.Y, spriteT.Width, spriteT.Height); 
     spriteOrigin = new Vector2(spriteR.Width/2, spriteR.Height/2); 

     if (Keyboard.GetState().IsKeyDown(Keys.Right)) rotation += 0.1f; 
     if (Keyboard.GetState().IsKeyDown(Keys.Left)) rotation -= 0.1f; 

     if (Keyboard.GetState().IsKeyDown(Keys.Up)) 
     { 
      spriteVelocity.X = (float)Math.Cos(rotation) * tangentialVelocity; 
      spriteVelocity.Y = (float)Math.Sin(rotation) * tangentialVelocity; 
     } else if (spriteVelocity != Vector2.Zero) 
     { 
      float i = spriteVelocity.X; 
      float j = spriteVelocity.Y; 

      spriteVelocity.X = i -= friction * i; 
      spriteVelocity.Y = j -= friction * j; 
     } 

     base.Update(gameTime); 
    } 

puis méthode draw:

protected override void Draw(GameTime gameTime) 
    { 
     GraphicsDevice.Clear(Color.CornflowerBlue); 

     spriteBatch.Begin(); 

     foreach(Bushes bush in bushes) 
     { 
      bush.Draw(spriteBatch); 
     } 

     player.Draw(spriteBatch); 
     spriteBatch.Draw(spriteT, spritePos, null, Color.White, rotation, spriteOrigin, 0.1f, SpriteEffects.None, 0f); 
     spriteBatch.End(); 

     base.Draw(gameTime); 
    } 

est que quand je presse « Up » flèche cette petite fusée devrait aller en direction il est pointé (parce que je peux le faire tourner avec les flèches Gauche et Droite pour le faire pointer), mais le résultat de ce code est que quand j'appuie sur Flèche vers le haut, le sprite se déplace vers la droite ne va pas où c'est pointu mais un peu latéral:/

Qu'est-ce que je fais mal ici?

PS. toutes les variables arent déclarées et initialisées dans le code sont des variables globales et initialisées dans les méthodes Initialize() et LoadContent():/

Répondre

0

Si votre rotation est initialisée à 0, elle doit pointer vers la droite, regardez où 0 points à sur le cercle trigonométrique ci-dessous :)

Trig Circle

Vous pouvez calculer votre direction avec Vector2.Transform et donner comme valeur paramètre (premier) Vector2 (0,1) de sorte que votre direction de référence serait en place. Ou vous faites pivoter votre sprite vers la droite et initialisez votre angle à Pi/2.

+0

Merci beaucoup: D –