2016-07-19 1 views
2

Я хочу знать фактическую точку попадания, когда черта линии попадает в объект треугольника.Как я могу получить точку Hit в тесте на удар между двумя динамически добавленными объектами в AS3?

Я использую следующие коды для попадания между два объектом:

target.hitTestObject(border); 

где целью является объектом треугольника и границы представляет собой группу, где я поместил прямоугольник с инсультом SolidColorDash.

И я использую следующие коды для получения хита координат:

var x:Number = target.x; 
var y:Number = target.y; 

И это дает й и у координат, когда пунктирная линия прикасается к границе объекта треугольника, но я хочу координата, когда штриховая линия коснется битмапдата объекта треугольника.

enter image description here

Так кто-нибудь есть идеи, как решить эту проблему или как получить удар координат.

+2

Проверка пиксельных идеальной библиотеки столкновений, некоторые из них ночь уже это реализовано. – Vesper

+0

Возможный дубликат [HitTest не работает правильно при использовании Graphics.lineTo/curveTo] (http://stackoverflow.com/questions/21923615/hittest-not-working-correctly-when-using-graphics-lineto-curveto) – null

+0

Спасибо @Vesper пиксель-идеальное столкновение решает мою проблему. – Ashish

ответ

1

Эти коды решить мою проблему для получения реального столкновения:

private var returnValue:Boolean; 
private var firstPoint:Point; 
private var secondPoint:Point; 
private var firstRectangle:Rectangle; 
private var secondRectangle:Rectangle; 
private var firstObjectBmpData:BitmapData; 
private var secondObjectBmpData:BitmapData; 
private var firstOffSetMatrix:Matrix; 
private var secondOffSetMatrix:Matrix; 

public function testCollision(clip1:DisplayObjectContainer, clip2:DisplayObjectContainer):Boolean 
{ 
     returnValue = false; 

     firstRectangle = clip1.getBounds(clip1); 
     secondRectangle = clip2.getBounds(clip2); 

     if(secondRectangle.width != 0 && secondRectangle.height != 0 && firstRectangle.width != 0 && firstRectangle.height != 0) 
     { 
      firstObjectBmpData = new BitmapData(firstRectangle.width, firstRectangle.height, true, 0); 
      firstObjectBmpData.draw(clip1); 

      secondObjectBmpData = new BitmapData(secondRectangle.width, secondRectangle.height, true, 0); 
      secondObjectBmpData.draw(clip2); 

      firstPoint = new Point(clip1.x, clip1.y) 
      secondPoint = new Point(clip2.x, clip2.y) 

      if (firstObjectBmpData.hitTest(firstPoint, 255, secondObjectBmpData, secondPoint, 255)) 
      { 
       returnValue = true; 
      } 
     } 

     return returnValue; 
} 
Смежные вопросы