2011-01-27 5 views
1

Мне нужно сделать большое количество гекстелей на холсте. Я хотел бы сделать так, чтобы я отображал только плитки, которые видны пользователю, и загружает дополнительные хекстели, когда пользователь прокручивает (используя клавиши перетаскивания или стрелки или элемент управления панорамированием). У меня есть основная идея в моей голове, но я ищу помощь в разработке более надежного решения, которое будет хорошо масштабироваться.контроль панорамирования для хекстелей

То, что я имею в виду и могу сделать прямо сейчас:

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

Это работает, но это не дает ощущение прокрутки - оно по существу внезапно перекладывает все. В идеале, я хотел бы получить представление о картах Google при прокрутке этого. Я играл с загрузкой некоторых фрагментов на стороне карты и прокручивал только нижний холст при перетаскивании, но это не работает слишком хорошо, потому что холст заканчивается ... это было бы очень аккуратно, если бы у меня был холст, который вел себя как круговой буфер, поэтому прокрутка в любом направлении содержала только определенное количество плиток в памяти, и я могу непрерывно прокручивать все направления.

Любые мысли или полезные советы заслуживают высокой оценки.

Спасибо!

ответ

0

Я бы предложил использовать API-интерфейс Google Maps Flash в качестве отправной точки для этого. Вы можете создать CustomTileLayer, и если у вас есть один большой исходный образ, вы можете искать вокруг создателей пирамиды изображений, которые будут отображать ваше изображение в образцах для разных уровней масштабирования (обычно я считаю, что это приводит к созданию структуры папок, которая использует уровень масштабирования как имя папки, а затем x, y плит в каждой папке в зависимости от разрешения изображения и уровня масштабирования). Если масштабирование не является требованием, вы просто должны иметь один уровень масштабирования и хотите отключить любые элементы управления увеличением в элементе управления Map. Сообщите мне, есть ли причина, по которой вы избегаете этого, или считаете, что это не будет хорошим решением (возможно, просто не знали о его существовании, но я думаю, что если вы хотите что-то вроде того, как ведут себя карты Google, почему бы не использовать карты google как основа). Если вам нужна дополнительная помощь в этом вопросе после того, как вы меняете, дайте мне знать, и я буду рад помочь, я никогда не реализовал сам CustomTileLayer, но имею немного опыта работы с API флеш-карт Google Maps (он также гибко проверяет вы используете правый swc, один - Flash, другой - Flex, который не включает оба).

Успехов, Shaun

http://nl-samples.googlecode.com/svn/trunk/flexmap/9a/bin-release/CustomProjection.html

+0

Привет Шон, спасибо за этот подробный комментарий. Я изучал API Google Maps Googla, но не был уверен, применим ли он в моем случае. У меня есть список гексаметаллов, которые существуют сами по себе, и у меня может быть неограниченное число из них. Кроме того, каждая гексагональная плитка отделяется прямо сейчас. Чтобы использовать карты goole flash api, я думаю, мне просто нужно сделать одно большое изображение со всеми шестнадцатеричными фрагментами, которые я не уверен, будет работать слишком хорошо (так как каждая гексагональная плитка имеет несколько характеристик, которые нам нужно отслеживать из). Любые дополнительные комментарии, которые у вас есть с этим, будут полезны. – Azeem

+0

Hi Azeem, без проблем, жаль, что это не решит вашу проблему. Когда вы говорите, что холст «иссякает», вы имеете в виду, что вы превышаете предел 4800x4800 для графики? Я думаю, что, может быть, вы можете сохранить шестнадцатеричные плитки в качестве отдельных спрайтов (например, как вы говорите), и использовать холст для захвата событий мыши, а затем перемещать спрайты индивидуально и загружать и перемещать по мере необходимости. В принципе, я думаю, вам, возможно, придется играть с количеством «близких» фрагментов, которые вы загружаете, в зависимости от того, как быстро вам нужно прокручивать/сколько нужно предустановить, но ваша общая концепция звучит хорошо. Если у меня будет время, я буду экспериментировать. – shaunhusain