Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Замена HitTestPoint (http://www.flasher.ru/forum/showthread.php?t=210492)

Wormhole 21.03.2015 20:30

Замена HitTestPoint
 
Здравствуйте. Я для тренировки делаю платформер. Для обработки столкновения с землей чаще всего используется HitTestPoint (HTO не сработает, платформы не представляют собой не один прямоугольник, а несколько). Проблема в том, что он вызывает у меня большое количество ошибок разного рода, но это не столь важно. Мне, честно говоря, влом работать с точками столкновения, в особенности проставлять их + уродовать макет сцены невидимой "землей" (объединение всех прямоугольников-платформ). Нет ли какого-нибудь другого способа обрабатывать столкновение с платформами, кроме разбиения фигуры на прямоугольники и последовательной обработки каждого?

OlmerDale 21.03.2015 20:52

Не совсем понял... Но Вы о третьем параметре hitTestPoint знаете?

ZackMercury 21.03.2015 21:11

Рисуйте платформы в битмап-контейнер, и проверяйте свободность пикселов под героем при ходьбе/падении. Пока он стоит, проверять и не стоит даже(если конечно платформы не двигаются или не крутятся).

Wormhole 22.03.2015 09:30

Цитата:

Сообщение от ZackMercury (Сообщение 1180332)
Рисуйте платформы в битмап-контейнер, и проверяйте свободность пикселов под героем при ходьбе/падении. Пока он стоит, проверять и не стоит даже(если конечно платформы не двигаются или не крутятся).

Так, а вот это уже интересно. У меня маловато опыта, где можно прочитать про битмап-контейнеры? Мне их рекомендовали еще год назад. Заранее спасибо

Под контейнером вы подразумеваете просто общий для всей "земли" объект класса Bitmap, к которому можно применять методы BlendMode?

Добавлено через 5 минут
Цитата:

Сообщение от OlmerDale (Сообщение 1180331)
Не совсем понял... Но Вы о третьем параметре hitTestPoint знаете?

Посмотрел в доках, не совсем понял. По рамке персонажа проводится тестирование, если true, я так думаю? Если это так, то это сильно облегчит работу

ZackMercury 22.03.2015 12:54

Цитата:

Так, а вот это уже интересно. У меня маловато опыта, где можно прочитать про битмап-контейнеры? Мне их рекомендовали еще год назад. Заранее спасибо

Под контейнером вы подразумеваете просто общий для всей "земли" объект класса Bitmap, к которому можно применять методы BlendMode?
Смотрите, есть класс Bitmap, он содержит в себе экземпляр класса BitmapData.
Подробнее про эти классы в доках да и в инете полно примеров.

Так вот, получить ссылку на битмапдату можно так:(если вы в FD, иначе если вы в Adobe Flash CSX, то у вас в библиотеке картинки хранятся уже в виде BitmapData, и их нужно передавать в конструктор битмапы, чтобы нарисовать)
Код AS3:

var bmp:Bitmap = new SomeBitmapEmbedImage();
var bmpDt:BitmapData = bmp.bitmapData;

нарисовать объект в битмапдату можно методом draw. Он принимает объект и матрицу, кормите ему матрицу трансформации DO(someSprite.transform.matrix)
Рисуем какой-т спрайт в битмапдату битмапы bmp

Код AS3:

bmpDt.draw(someSprite, someSprite.transform.matrix);
addChild(bmp);

Получить пиксели в конкретной точке битмапдаты можно с помощью методов getPixel/setPixel и getPixel32 и setPixel32.

Добавлено через 9 минут
BitmapData по сути - просто массив пикселей, с удобными методами.

Wormhole 22.03.2015 13:03

Спасибо за разъяснение!

Цитата:

Сообщение от ZackMercury (Сообщение 1180357)
Нарисовать объект в битмапдату можно методом draw. Он принимает объект и матрицу, кормите ему матрицу трансформации DO(someSprite.transform.matrix)

Хм, если мне надо (и даже не всегда) лишь перемещать битмапу, мне все равно скармливать ему матрицу трансормации?
Плюс если я собираюсь использовать BlendMode, мне надо что-то в соответствующий параметр писать? (вопрос не по теме, это уже касательно флешек а-ля worms)

ZackMercury 22.03.2015 13:04

Вам нужно создавать экземпляр BitmapData вручную, с размерами вашей карты, и рисовать туда платформы.

Wormhole 22.03.2015 13:07

Цитата:

Сообщение от ZackMercury (Сообщение 1180357)
Так вот, получить ссылку на битмапдату можно так: (если вы в FD, иначе если вы в Adobe Flash CSX, то у вас в библиотеке картинки хранятся уже в виде BitmapData, и их нужно передавать в конструктор битмапы, чтобы нарисовать)
Код AS3:

var bmp:Bitmap = new SomeBitmapEmbedImage();
var bmpDt:BitmapData = bmp.bitmapData;


То есть, во Flash IDE эта композиция реализована для каждого объекта (и сами эти объекты принадлежат классу Bitmap)? Или это просто экземпляр класса BitmapData, не связанный с классом Bitmap?

ZackMercury 22.03.2015 13:07

Перемещать битмапу легко, просто bmp.x -= 2, bmp.y += 5;
Матрицу трансформации вы скармливаете ОБЪЕКТА, а не битмапдаты, чтобы объект рисовался не в начальных координатах, а в своих.

Wormhole 22.03.2015 13:08

Цитата:

Сообщение от ZackMercury (Сообщение 1180360)
Вам нужно создавать экземпляр BitmapData вручную, с размерами вашей карты, и рисовать туда платформы.

Поясните, пожалуйста, что вы имеете в виду касательно размеров.


Часовой пояс GMT +4, время: 22:07.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.