PDA

Просмотр полной версии : Пересечение объектов сложной формы.


Ylik
02.06.2011, 03:21
Здравствуйте! Много встречается подобных тем, но так до конца мне не удалось понять сути. :(
Я не могу разобраться, как реализовать пересечение (столкновение) объектов.
Например, при пересечении двух мувиклипов должно произойти определённое действие.
Делаю с помощью hitTest, но пересекаются границы мувиклипов, а не их содержимое. Вот и ломаю голову, как сделать, чтобы действие происходило при пересечении видимой части мувиклипов, а не их контейнеров.
Причём внутри этих мувиклипов есть ещё мувиклипы, и я хочу, чтобы пересечение происходило по контурам самого последнего вложенного мувиклипа.

Или ещё, как вариант, пересечение точек регистрации этих мувиклипов. Но это я вообще не знаю как делается.

Очень прошу, помогите мне, пожалуйста, разобраться, знающие люди!
Спасибо!

udaaff
02.06.2011, 03:33
Отрисовывать в BitmapData и хиттестить http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00000794.html#157187

Ylik
02.06.2011, 03:35
Спасибо! Извините, а есть то же самое на русском, а то я не сильна в английском? :rolleyes:

Добавлено через 4 минуты
Вроде нашла. Сейчас почитаем. Если что - опять сюда. :mosking:

Добавлено через 3 часа 50 минут
Ну, короче говоря, непонятно ничего... :(

iNils
02.06.2011, 08:39
На русском (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#hitTest%28%29) есть для AS3, но по сути тоже самое.

Ylik
02.06.2011, 09:04
Спасибо большое за помощь! Как-то сложно для понимания.
Вот (если я правильно поняла), получается, что я создала объект БитМап, так?

var bmd1: BitmapData = new BitmapData(100, 100, true, 0x000000);
bmd1.draw(_root.gl.mc1);

А дальше что делать, я пока не очень поняла.
Кого хиттестить и как? Если не сложно, может кто-нибудь ещё подсказать?
Спасибо!

iNils
02.06.2011, 09:40
Там же (в хелпе) пример есть.

Ylik
02.06.2011, 09:41
Вот, пытаюсь понять. Только как-то уже запуталась...

Добавлено через 11 минут
А ещё ошибку пишет The class or interface 'Bitmap' could not be loaded.
Только не знаю, что писать тогда надо.

iNils
02.06.2011, 10:11
Класс сначала надо импортировать
import flash.display.BitmapData;

Ylik
02.06.2011, 10:16
Сейчас, в результате изучения данной выше информации, у меня получился вот такой код. Только пока не вижу, что он работает у меня.


import flash.display.BitmapData;
import flash.geom.Point;

var bmd1: BitmapData = new BitmapData(100, 100, true, 0x000000);
var mc_1:MovieClip = mc_1.createEmptyMovieClip("_root.gl.gl1", mc_1.getNextHighestDepth());
mc_1.attachBitmap(bmd1, mc_1.getNextHighestDepth());

var destPoint:Point = new Point(bmd1.rectangle.x, bmd1.rectangle.y);
var currPoint:Point = new Point();

currPoint.x = _root.mm.mm1._x;
currPoint.y = _root.mm.mm1._y;

if(bmd1.hitTest(destPoint, 255, currPoint)) {
trace(">> Collision at x:" + currPoint.x + " and y:" + currPoint.y);
}

Только смотрела в английском варианте и , честно говоря, не всё понятно.

iNils
02.06.2011, 10:38
Прежде чем пихать в свой код, надо разобраться с рабочим примером, понять что там и как.
А ваш код мне ни о чем не говорит.
И называть клип как "_root.gl.gl1" что это за имя? Структуру он все равно не создает, а только вносит путаницу.

Ylik
02.06.2011, 10:40
А вы могли бы тогда подробнее объяснить, а то у меня какое-то недопонимание этого кода? :rolleyes:

dark256
02.06.2011, 11:30
Правильно заданный вопрос содержит в себе половину ответа.
У вас же даже не вопрос, а предложение коротенечко, минут на 70 зачитать вам основы программирования :)
Читайте хэлпы. И туторы. Их очень много.

Ylik
02.06.2011, 11:44
Я этим и занимаюсь... :wacko:
Мне не понятно, почему нет пересечения объектов. :wacko:

Добавлено через 4 минуты
И про имя мувиклипа : _root.gl.gl1 - это условно. На деле предполагается название мувиклипов, определяющие их содержимое (например, дом.квартира.комната и т.д.)

dark256
02.06.2011, 12:27
Вы отлаживаете УСЛОВНЫЙ код?
Тогда вам также понадобится условный отладчик и условный компилятор ;)