Как правильно использовать hitTest между bitmapData и объектом?

Я преобразовал PNG в растровое изображение, а затем преобразовал его в bitmapData.

У меня есть объект с именем _player, и я хочу добавить обнаружение столкновений, однако мне кажется, что я могу заставить его работать.

мой код:

if(bmd1.hitTest(new Point(_player.x, _player.y))){
trace("hit");
}

bmd1 — это мой bitmapData, _player — это объект, который нужно протестировать.

Я получаю следующую ошибку:

1136: Incorrect number of arguments, Expected 3

Я огляделся, но не могу найти, какой аргумент мне не хватает

Любые идеи?

Обновить

я пытался

if(bmd1.hitTest(new Point(_player.x, _player.y), 50, _player)){
trace("hit");
}

без радости

Обновление 2

Извините, я должен упомянуть, что причина, по которой я выбрал этот подход, заключается в том, что у меня есть PNG с прозрачными областями, мне нужно проверить наличие коллизий в непрозрачных областях, поэтому я использовал этот подход

У меня есть PNG, я импортирую его и конвертирую в растровое изображение, а затем конвертирую в bitmapData

Возможно, я делаю это совершенно неправильно. Не могли бы вы показать мне, в чем заключается проблема?


person atmd    schedule 23.08.2011    source источник
comment
hitTest для объекта BitmapData немного отличается от методов, используемых в обычных объектах отображения. Вы уверены, что не хотите вместо этого запускать hitTest для своего растрового изображения?   -  person shanethehat    schedule 23.08.2011


Ответы (3)


hitTest имеет 3 обязательных аргумента:

public function hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1)

См. документ

person Kodiak    schedule 23.08.2011

В конце концов я преобразовал свой муви-клип плеера в растровые данные, преобразовал мою карту png в растровые данные, а затем использовал hitTest для проверки x и y каждого растрового изображения друг против друга.

person atmd    schedule 26.08.2011

Вам нужен метод hitTestPoint(), а не hitTest().

РЕДАКТИРОВАТЬ: упс, я пропустил, что вы проводили тест на попадание в BitmapData вместо DisplayObject. BitmapData.hitTest() выполняет обнаружение на уровне пикселей, что во многих ситуациях происходит довольно медленно. Вам, вероятно, лучше поместить BitmapData в Sprite, а затем использовать hitTestPoint()

person jhocking    schedule 23.08.2011
comment
BitmapData не имеет метода hitTestPoint, он немного отличается от других объектов DisplayObject. - person shanethehat; 23.08.2011
comment
Поместите BitmapData внутрь Sprite, и проблема будет решена. - person Alex; 23.08.2011
comment
о, он запускает тест на попадание прямо на растровые данные? Это странно; Я бы провел тест попадания на Sprite, у которого есть BitmapData. Обычно я рассматриваю BitmapData просто как информацию о статическом изображении, а Sprite — как интерактивный объект. - person jhocking; 23.08.2011