Этот этап занял некоторое время. Хорошо что нашёлся ещё один пример с открытым кодом от Adam Zwakk, что мне очень помогло:
Создать игровое поле было довольно просто, особенно имея в наличии примеры реализации. Но были и ошибки с которыми я столкнулся как новичок. Кроме того в примерах я не нашёл части нужной функциональности, которую пришлось доделывать самому.
Основной проблемой было ограничить скроллинг игрового поля, и при этом позволить пользователю масштабировать это же поле. Поэтому я сделал отдельный пример с моим решением этой проблемы.
Вот код примера: скачать. А дальше я расскажу об основных препятствиях.
Система координат
Первым делом необходимо понять систему координат. Поначалу не разобравшись как следует сделал лишнюю работу, прежде чем понял что к чему.
Изображение в As3Iso.lib строится следующим образом:
- IsoView - {x = 0; y = 0} в центре экрана, положительные значения вверх и влево.
- IsoScene – координат не содержит
- IsoSprite - имеет доступ к двум системам координат:
- 1. IsoSprite.container – (спрайт отображающий объекты IsoSprite) {x = 0; y = 0} в центре экрана, но положительные значения вправо и вниз.
- 2. Изометрические координаты IsoSprite, о которых сейчас речь не идёт.
- Sprite – {x = 0; y = 0} в центре экрана, положительные значения вправо и вниз.
Масштабирование и скроллинг
Масштабирование и скроллинг по отдельности устроены довольно просто. Но совмещение этих двух вещей с наложением ограничений на скроллинг может стать проблемой.
Чтобы ограничить скроллинг создаётся специальный спрайт, размером превышающий окно игры и прикреплённый к текущему IsoView следующим образом:
pan_limit_sp = new Sprite(); // задаётся размер и положение в пространстве updatePanLimitSize(); view.backgroundContainer.addChild(pan_limit_sp); view.rangeOfMotionTarget = pan_limit_sp; view.limitRangeOfMotion = true;
После этого скроллинг возможен до тех пор пока окно игры расположено в пределах «pan_limit_sprite».
При масштабировании «pan_limit_sprite» должен соотвественно менять размер и положение чтобы границы окна игры постоянно находились внутри него, иначе эта система не будет работать.
Полное решение можно посмотреть в коде примера (ссылка на скачивание выше). Масштабирование выполняется колесом мышки. Попробуйте увеличить спрайт до максимума, передвинуть до упора в любую из сторон, затем уменьшить до минимума.