2014-08-28 3 views
0

J'ai un rectangle avec un carré en bas. J'ai aussi du code qui fait tourner le rectangle autour de son origine qui est en haut de ce rectangle. Im essayant de faire le carré au fond pour toujours rester à la fin de ce rectangle même quand il est tourné. Hers une photo pour illustrer mon problème:Faire un point suivre un sprite rotatif

enter image description here

Je vois maintenant que ce n'était pas une bonne idée de faire de la place au fond blanc. Donc, quand je fais tourner le rectangle vers le haut à droite ou vers le haut à gauche, je veux que le carré reste à la fin de ce rectangle. Peut-être y a-t-il une solution simple, mais mes connaissances ne sont pas aussi bonnes qu'elles devraient l'être à ce sujet. J'espère que quelqu'un pourrait me diriger dans la bonne direction.

Répondre

0

Quelque chose comme ceci devrait vous y mener.

float pendulumAngle; 
Vector2 origin; 
Vector2 squareTLcorner;//top left corner of square 
Vector2 squareOffset; 

void Reset() 
{ 
    pendulumAngle = 0; 
    origin = new Vector2(?.?f, ?.?f);// set to whatever you need 
    squareTLcorner = new Vector2(?.?f, ?.?f); // set to whatever you need 
    squareOffset = squareTLcorner - origin; 

} 

void UpdatePendulum(float angleMovedSinceLastFrame) 
{ 
    pendulumAngle += angleMovedSinceLastFrame; 
} 

void UpdateSquarePosition() 
{ 
    squareTLcorner = Vector2.Transform(squareOffset, Matrix.CreateRotationZ(pendulumAngle) + origin; 

} 

void DrawSquare() 
{ 
    spriteBatch.Draw(sqTex,squareTLcorner, , ,pendulumAngle, , , , );// overload 6 of 7 
} 
0

La méthode la plus simple consiste à transmettre une matrice de transformation au lot de sprites.

Rectangle Black = new Rectangle(0,0, 20, 100); 
Rectangle White = new Rectangle(Black.Left, Black.Bottom, Black.Width, Black.width); 

Vector2 Pivot= new Vector(100,100); 
vector2 Origin = new Vector2(10,10); 

Matrix transform = Matrix.CreateTranslation(-Origin.X, -Origin.Y) 
        * Matrix.CreateRotationZ(angle) 
        * Matrix.CreateTranslation(Pivot); 

SpriteBatch.begin(...., transform) 

    SpriteBatch.Draw(Texture, Black, Color); 
    SpriteBatch.Draw(Texture, White, Color); 

SpriteBatch.end(); 

Fondamentalement, vous travaillez dans un espace différent qui est mis en rotation ans TRADUIT que vous avez besoin, se rendre compte que l'emplacement du rectangle noir est (0,0). Code: il n'a pas été testé mais devrait fonctionner comme prévu. ;)

Questions connexes