2011-09-23 2 views
1

Je travaille sur une application dans laquelle les images volent sur l'écran. J'ai besoin de mettre en œuvre:Faites glisser une image dans XNA

  1. Tenir sur l'une des images de vol sur Tap
  2. Faites glisser l'image à certaine position de choix de l'utilisateur en permettant à l'utilisateur le maintenir.

Répondre

1

Lorsque vous chargez votre image, vous aurez besoin d'un objet ou d'un rectangle BoundingBox pour contrôler où il est. Par conséquent, dans l'application XNA sur votre téléphone, vous devez déclarer un ou deux objets pour votre texture. Puis, après avoir chargé le contenu de votre image, maintenez votre boîte de sélection à jour avec la position de votre image.

bBox.Min = new Vector3(position, 1.0f); 
bBox.Max = new Vector3(position.X + texture.Width, position.Y + texture.Height, 0f); 

Puis aussi dans votre méthode de mise à jour, vous devriez avoir une collection tactile initialisé pour gérer l'entrée de l'écran, obtenir les positions de la collection tactile, boucle à travers eux et voir si elles se croisent votre BoundingBox.

foreach (Vector2 pos in touchPositions) 
{ 
    BoundingBox bb = new BoundingBox(); 
    bb.Min = new Vector3(pos, 1.0f); 
    bb.Max = new Vector3(pos, 0f); 

    if (bb.Intersects(bBox) 
    { 
     if (selected) 
     { 
      //do something 
     } 
     else 
     { 
      selected = true; 
     } 
    } 
} 

De là, vous avez si votre objet est sélectionné ou non. Ensuite, utilisez simplement les événements gestures pour déterminer ce que vous voulez faire avec votre objet texture.

3

Voici un autre moyen facile de faire glisser. Dessinez simplement votre image (Texture2d) par rapport à un rectangle au lieu de Vector2. Vos variables d'image doivent ressembler à ceci

Texture2d image; 
Rectangle imageRect; 

Dessinez votre image par rapport à "imageRect" dans la méthode Draw().

spriteBatch.Draw(image,imageRect,Color.White); 

maintenant dans la méthode de mise à jour() Manipulez votre image avec seule entrée tactile.

//Move your image with your logic 

TouchCollection touchLocations = TouchPanel.GetState(); 
foreach(TouchLocation touchLocation in touchLocations) 
{ 
    Rectangle touchRect = new Rectangle 
    (touchLocation.Position.X,touchLocation.Position.Y,10,10); 
    if(touchLocation.State == TouchLocationState.Moved 
    && imageRect.Intersects(touchRect)) 
    { 
    imageRect.X = touchRect.X; 
    imageRect.Y = touchRect.Y; 
    } 
//you can bring more beauty by bringing centre point 
//of imageRect instead of initial point by adding width 
//and height to X and Y respectively and divide it by 2 
Questions connexes