Каков наилучший метод в XNA, чтобы игрок плавно рисовал на экране?

Я разрабатываю игру wp7, в которой игрок рисует линии в программе, а мяч отскакивает от них. Я использую XNA и физику farseer. Каков наилучший способ для пользователя нарисовать линию, а затем для программы взять ее и превратить в физический объект или, по крайней мере, в список vector2? Я пытался создать список TouchLocations, но он оказывается нечетким, если пользователь не рисует очень медленно, как на картинке, которую я приложил. Какие-либо предложения? Спасибо http://img829.imageshack.us/img829/3985/capturehbn.png

Вот некоторый код: я использую пример gamestatemanagement, и это в методе HandleInput

foreach (TouchLocation t in input.TouchState) {
  pathManager.Update(gameTime, t.Position);
}

Класс pathManager управляет коллекцией классов путей, которые являются физическими объектами, которые можно рисовать. Вот pathManager.Update

public void Update(GameTime gameTime, Vector2 touchPosition) {
  paths.Add(new Path(world,texture, new Vector2(5,5) ,0.1f));
  paths[paths.Count-1].Position = touchPosition;
}

Это именно то, чем я сейчас занимаюсь, и я готов выбросить это за что угодно. Вы могли бы подумать, что наличие прямоугольника 5x5 для каждого места касания убьет производительность, но с помощью farseer я не видел никаких падений, даже при почти полном экране. Однако эта система вообще не создает плавной линии, если линия рисуется быстро.

Я сомневаюсь, что это кому-то поможет, но вот конструктор Path.

public Path(World world, Texture2D texture, Vector2 size, float mass) {
  this.Size = size;
  this.texture = texture;
  body = BodyFactory.CreateRectangle(world, size.X * pixelToUnit, size.Y * pixelToUnit, 1);
  body.BodyType = BodyType.Static;
  body.Restitution = 1f;
  body.Friction = 0;
  body.Friction = 10;
}

person Ian Wilson    schedule 24.12.2012    source источник
comment
Не могли бы вы вставить соответствующий код?   -  person ForceMagic    schedule 24.12.2012
comment
у вас должно быть более 2 точек линии?   -  person Vlad Spreys    schedule 24.12.2012
comment
Я полагаю, что нет, но желательно да. Хотя я вижу только прямую линию. Как мне это сделать?   -  person Ian Wilson    schedule 25.12.2012
comment
Мне интересно, есть ли какой-то алгоритм для вычисления всех позиций между пропущенными местами?   -  person Ian Wilson    schedule 25.12.2012
comment
Когда вы говорите все промежуточные позиции, что вы на самом деле имеете в виду?   -  person neeKo    schedule 25.12.2012
comment
Я имею в виду, когда он переходит от одной точки к другой, как в ссылке на изображение, которую я разместил, есть ли способ найти все точки вдоль наклона двух точек, которые он записал?   -  person Ian Wilson    schedule 25.12.2012


Ответы (1)


Как рисовать линии с помощью XNA?

лучший способ рисовать примитивы — использовать шейдер baseeffect. это будет ускорено аппаратно. Вы также можете добавить к нему текстуру, если хотите.

я не уверен, что это то же самое на WP7, но это работает по крайней мере для Windows7.

person ColacX    schedule 26.12.2012
comment
Спасибо за ответ, мне нравится этот метод для его рисования, но мне нужен список всех точек вдоль линии для обнаружения столкновений. - person Ian Wilson; 27.12.2012
comment
Что ж, любое тело, созданное BodyFactory, должно работать. Или вы имеете в виду, когда линии сталкиваются друг с другом? В Farseer есть такая штука, как Контакт. Всякий раз, когда происходит столкновение, создается контакт, который содержит некоторую информацию о том, где именно произошло столкновение. - person ColacX; 27.12.2012
comment
В этом есть смысл. Я не знаю, почему я застрял в списке vector2. В итоге я использовал BodyFactory.CreateEdge, используя первую и последнюю точки жеста свободного перетаскивания и используя ваш метод рисования. Спасибо! - person Ian Wilson; 29.12.2012