2013-07-21 1 views
2

Я просто добавил спрайт в AS3:hitTestPoint с «shapeFlag = True» не работает в AS3

Sprite myspr = new Sprite(); 
myspr.addChild(mybitmap); 
addChild(myspr); 

Затем я добавил событие. Я сделал hitTestPoint для проверки мыши над моим спрайтом или нет.

stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseCheck); 

private function mouseCheck(evt:MouseEvent):void { 
    var xx:int = stage.mouseX; 
    var yy:int = stage.mouseY; 

    if(myspr.hitTestPoint(xx, yy, true)) { 
     ... 
     // I'm checking mouse over here. 
    } 

    evt.updateAfterEvent(); 
} 

Проблема в том, что hitTestPoint дает истину, когда мышь достигает полной границы. Но это должно быть верно, только если мышь приходит на прозрачный изометрический спрайт. http://i41.tinypic.com/2rmb0i0.png

Есть ли решение для этого, заранее.

+0

+1 для рисунка. Я буду читать вам вопрос позже – ZuzEL

+0

Это myBitmap изображение? Я думаю, что shapeflag работает с фигурами, которые являются векторными в природе, например. форма, нарисованная с использованием инструментов в Flash Professional, форма, нарисованная с использованием графических директив, таких как beginFill, lineTo и т. д. – catholicon

+0

@catholicon mybitmap - объект Bitmap. Его bitmapData является прозрачным png. –

ответ

0

Там несколько способов, обычно я ударил тестирования.

1) Самый простой способ - использовать уже подготовленный класс, который вы можете найти в Интернете. Некоторые люди намного умнее меня создали сложные классы, которые обеспечивают гораздо лучшее взаимодействие пикселей с пикселями. Те, что перечислены в Paras, хороши. Проблема с ними заключается в том, что для более новых пользователей может быть трудно понять весь код и как их реализовать. Обычно это просто, как только вы понимаете, что происходит. Вы просто заменяете свой тестовый тест файлом класса и затем вводите правильные аргументы.

2) Еще один способ - фактически перейти в символ, создать новый слой, а затем нарисовать прямоугольник (просто поверните альфа до 0%), где вы хотите, чтобы тест попадания работал. Это может показаться глупым методом, ведь мы снова ограничимся квадратом. НО, он будет работать намного лучше, чем вы ожидали. Просто нарисуйте квадрат, возможно, немного меньше высоты и ширины вашего персонажа, на котором вы обнаружите тест на удар, и вам должно быть хорошо идти. Дайте ему имя экземпляра (квадрат хита), а затем просто выполните hitTest с этим квадратом вместо фактического спрайта. Он отлично работает и является очень простым решением. Тем не менее, как вы объясняете, это звучит так, будто это может не сработать. Этот метод больше с точки зрения геймера. Он хорошо выглядит при атаке и попадании врагов, но не обязательно точный. Кроме того, если вы хотите сделать это с двумя персонажами (возможно, с большой атакой, поражающей врага), просто нарисуйте поле для обоих спрайтов. Это, вероятно, немного более основательно, чем использование предварительно созданного теста обнаружения идеального попадания пикселей, но он работает очень хорошо и занимает всего несколько минут.

Смежные вопросы