![]() |
Замена HitTestPoint
Здравствуйте. Я для тренировки делаю платформер. Для обработки столкновения с землей чаще всего используется HitTestPoint (HTO не сработает, платформы не представляют собой не один прямоугольник, а несколько). Проблема в том, что он вызывает у меня большое количество ошибок разного рода, но это не столь важно. Мне, честно говоря, влом работать с точками столкновения, в особенности проставлять их + уродовать макет сцены невидимой "землей" (объединение всех прямоугольников-платформ). Нет ли какого-нибудь другого способа обрабатывать столкновение с платформами, кроме разбиения фигуры на прямоугольники и последовательной обработки каждого?
|
Не совсем понял... Но Вы о третьем параметре hitTestPoint знаете?
|
Рисуйте платформы в битмап-контейнер, и проверяйте свободность пикселов под героем при ходьбе/падении. Пока он стоит, проверять и не стоит даже(если конечно платформы не двигаются или не крутятся).
|
Цитата:
Под контейнером вы подразумеваете просто общий для всей "земли" объект класса Bitmap, к которому можно применять методы BlendMode? Добавлено через 5 минут Цитата:
|
Цитата:
Подробнее про эти классы в доках да и в инете полно примеров. Так вот, получить ссылку на битмапдату можно так:(если вы в FD, иначе если вы в Adobe Flash CSX, то у вас в библиотеке картинки хранятся уже в виде BitmapData, и их нужно передавать в конструктор битмапы, чтобы нарисовать) Код AS3:
Рисуем какой-т спрайт в битмапдату битмапы bmp Код AS3:
Добавлено через 9 минут BitmapData по сути - просто массив пикселей, с удобными методами. |
Спасибо за разъяснение!
Цитата:
Плюс если я собираюсь использовать BlendMode, мне надо что-то в соответствующий параметр писать? (вопрос не по теме, это уже касательно флешек а-ля worms) |
Вам нужно создавать экземпляр BitmapData вручную, с размерами вашей карты, и рисовать туда платформы.
|
Цитата:
|
Перемещать битмапу легко, просто bmp.x -= 2, bmp.y += 5;
Матрицу трансформации вы скармливаете ОБЪЕКТА, а не битмапдаты, чтобы объект рисовался не в начальных координатах, а в своих. |
Цитата:
|
Нет, это я про библиотеку. Если вы будете создавать пустую битмапу с пустой битмапдатой, вам не нужно об этом беспокоиться. Я имел в виду, что в библиотеке(окошке справа) могут храниться картинки, и их тоже можно экспортировать в экшнскрипт. Так вот, в Flash IDE они экспортируются как BitmapData, а в FD - сразу Bitmap.
|
Цитата:
Добавлено через 2 минуты Цитата:
|
Касательно размеров, у вас карта то где хранится? Если у вас платформы хранятся в контейнере, то передавайте вот так его размеры:
Код AS3:
|
Цитата:
|
Ну, если не кодом, то вам лучше рисовать тогда карту в каком-нить Adobe Photoshop :)
Flash с растром ни тю-тю. Я вас хотел научить рисовать ВЕКТОР в РАСТР, во-первых, это + в пользу производительности(если вы конечно оригинальный вектор не будете тоже добавлять в список отображения), во-вторых, бОльшие возможности для обработки столкновений/перемещений. |
Цитата:
Но раз вы говорите, что у вектора такие преимущества, то давайте по порядку. Да, я хочу научиться рисовать ВЕКТОР в РАСТР. Но хотел бы сначала узнать, что такое контейнер объекта :o |
Вы с ООП не знакомы? Оу, тогда объяснить будет трудновато.
В общем, есть класс DisplayObject, от него наследуется Bitmap, например. В экземпляр класса Bitmap нельзя добавить содержимое, как это можно сделать со Sprite или MovieClip: Код AS3:
Цитата:
Так вот, Sprite, MovieClip - это контейнеры. Добавлено через 4 минуты И у вектора преимущества только в его малом весе на диске :) Производительность он убивает. |
Цитата:
Цитата:
Добавлено через 4 минуты Цитата:
|
Есть векторная графика - это графика, которая базируется на точках в пространстве. От одной точки к другой может быть линия, и линия может иметь направление, которое плавно переходит в следующую точку.
Такая графика используется в Adobe Flash, или если вы будете рисовать с помощью graphics. Она очень много требует производительности, т.е. немеренно есть ресурсы процессора. Есть растровая графика - это когда хранится матрица пикселей, т.е. точек на экране, и она не требует сложных вычислений сбоку процессора, просто рисование на экране. Конечно, к классу Bitmap можно применить scale или rotation, но это всё равно не так сильно будет грузить процессор, как векторная графика с его сотнями-тыщами точек и линий, которые нужно перерисовывать каждый кадр. Если вы попробуете наполнить экран 200-300 векторными рисунками, и попробуете их двигать, у вас CPU будет жрать на все 100%, и тормозить при этом будет жёстко. Если же это будут битмапы, то нагрузка будет мизерная, 20-30%, и тормозить не будет. Вы поняли, в общем. Но суть не в этом же, по теме вы хотите просто проверять столкновение с землёй. Проверяйте пиксел на битмапдате чуть ниже положения персонажа. |
Цитата:
|
Так вот, суть в том, чтобы сгруппировать ваши платформы в один единый контейнер, нарисовать их в битмапдату с размерами этого контейнера(а лучше нарисовать сам контейнер, тогда и матрица не нужна), создать экземпляр битмапа, скормить ему битмапдату с платформами и далее удалить контейнер с векторными формами с экрана(removeChild), а по сути можно вообще не добавлять.
И только после этого начинать игру и проверять столкновения когда надо. Добавлено через 14 минут Цитата:
Цитата:
Цитата:
|
Цитата:
Добавлено через 12 минут Цитата:
Добавлено через 16 минут Цитата:
Добавлено через 17 минут Цитата:
Добавлено через 18 минут Цитата:
Я надеюсь, вы ответите на все мои вопросы. Заранее спасибо |
Цитата:
Код AS3:
Код AS3:
Код AS3:
Добавлено через 5 минут Сейчас попробую быстро |
Цитата:
|
Верней там должно быть так:
Код AS3:
|
Цитата:
|
Вложений: 2
|
Это лицо будет сниться мне в кошмарах. http://upfile.at.ua/2015-03-22_22-14...ot_ehkrana.png
Спасибо за пример! |
Пародия на Cтива(в стиле ака ваша ава) из кубомира, старался :D
|
Цитата:
|
offtop
Wormhole, я непросвящённый был c: P.S. Как успехи с игрой? Выложите потом во флейм? |
| Часовой пояс GMT +4, время: 00:36. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.