Перетащите изображение в XNA - PullRequest
1 голос
/ 23 сентября 2011

Я работаю над приложением, в котором изображения летят на экран.Мне нужно реализовать:

  1. Удерживать любое из летающих изображений при нажатии
  2. Перетащите изображение в определенную позицию по выбору пользователя, позволяя пользователю удерживать его.

Ответы [ 3 ]

3 голосов
/ 09 ноября 2012

Вот еще один простой способ перетаскивания. Просто нарисуйте свое изображение (Texture2d) относительно прямоугольника вместо Vector2. Ваши переменные изображения должны выглядеть следующим образом

Texture2d image;
Rectangle imageRect;

Нарисуйте свое изображение относительно метода "imageRect" в методе Draw ().

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

Теперь в методе Update () обработайте ваше изображение одним касанием.

//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
2 голосов
/ 23 сентября 2011
1 голос
/ 28 мая 2012

Когда вы загружаете свое изображение, вам понадобится объект BoundingBox или Rectangle, чтобы контролировать его местоположение.

Итак, в приложении XNA на вашем телефоне у вас должна быть пара объектов, объявленных дляВаша текстура.

Texture2D texture;
BoundingBox bBox;
Vector2 position;
bool selected;

Затем, после загрузки содержимого изображения, обновляйте ограничивающую рамку в соответствии с позицией изображения.

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

Затем также в методе обновления вы должныинициализировать коллекцию сенсоров для обработки ввода с экрана, определить позиции коллекции сенсоров, просмотреть их и посмотреть, не пересекаются ли они с вашим ограничивающим прямоугольником.

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;
       }
   }
}

Оттуда вы можете выбрать, выбран ли ваш объект.или нет.Затем просто используйте события жестов, чтобы определить, что вы хотите сделать с вашим текстурным объектом.

...