Как правилно да използвате 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 срещу вашето Bitmap?   -  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, той е малко по-различен от другите DisplayObjects. - person shanethehat; 23.08.2011
comment
Поставете BitmapData вътре в Sprite и проблемът е решен. - person Alex; 23.08.2011
comment
о, той провежда теста за попадение директно върху растерните данни? Това е странно; Бих изпълнил теста за попадение на Sprite, който има тези BitmapData. Обикновено третирам BitmapData просто като информация за статичното изображение и Sprite като интерактивен обект. - person jhocking; 23.08.2011