PDA

Просмотр полной версии : Вопрос по hitTestObject( )


Bazel
14.04.2011, 15:29
вопрос :

У нас есть Фигура нарисованна на экране (круг) и есть прямая тоже нарисованная на экране. почему среда считает что круг касается прямой когда на самом деле нифига не касается ?
вот работающий код для наглядности


package
{

import flash.events.* ;
import flash.display.* ;

public class example extends Sprite
{
public var circle : Sprite = new Sprite ( ) ;
public var line : Shape = new Shape ( ) ;
public function example ( )

{
circle.graphics.lineStyle(1,0xff0000) ;
circle.graphics.beginFill(0xff0000);
circle.graphics.drawCircle(500,250,20) ;
addChild(circle) ;

circle.addEventListener(MouseEvent.MOUSE_DOWN,drag) ;
circle.addEventListener(MouseEvent.MOUSE_UP ,stopdrag) ;

line.graphics.lineStyle(1,0x0000ff) ;
line.graphics.moveTo(100,100) ;
line.graphics.lineTo(300,300) ;

addChild(line) ;
trace ("перетащи красный круг на линию пожалуйста" ) ;
}
public function drag (e: MouseEvent)
{
circle.startDrag( ) ;
}
public function stopdrag (e:MouseEvent)
{
circle.stopDrag( ) ;

if (circle.hitTestObject(line))
{
trace (" произошло касание" ) ;
}
else
{
trace ("касания не произошло" ) ;
}
}
}
}

откройте тайну

goodguy
14.04.2011, 15:34
Код нужно обрамлять тегами AS3.

По поводу вопроса, на самом деле hitTestObject() не расчитывает касание видимых частей фигур, он вычисляет пересечение их ограничивающих прямоугольников (bounding box).
Так что прямая может и не касаться круга для человека, но для программы они будут пересекаться.
Самый точный метод для расчета столкновений не прямоуголных, позиционированных вертикально объектов - это SAT (Separating Axis Theorem)

gloomyBrain
14.04.2011, 15:35
Потому что hitTestObject работает не с самой формой объекта, а с прямоугольником, который его окружает (стороны этого прямоугольника всегда параллельны осям координат).

Bazel
14.04.2011, 15:38
понял , спасибо

Добавлено через 5 минут
интерсно почему тогда касание между Кругами нормально регистрируются

samana
14.04.2011, 16:42
интерсно почему тогда касание между Кругами нормально регистрируются

Смотря с какой стороны произошло столкновение:


http://i.***********/i5/46/71/1377146/bounds.jpg

Bazel
14.04.2011, 17:10
да , точно ..