Показать сообщение отдельно
Старый 08.12.2010, 23:54
surlac вне форума Посмотреть профиль Отправить личное сообщение для surlac Найти все сообщения от surlac
  № 2  
Ответить с цитированием
surlac
 
Аватар для surlac

блогер
Регистрация: Nov 2010
Сообщений: 143
Записей в блоге: 1
По умолчанию hitTestPoint workaround

Привет!
Растолкуйте пожалуйста как работает hitTestPoint().
Я так понимаю, что при создании Rectangle вокруг него образуется Bounds толщиной 1 px, на который должен реагировать hitTestPoint при использовании аргумента shapeFlag = false. Для теста было написано следующее:

Код AS3:
var rect:Shape = new Shape();
rect.graphics.beginFill(0x555555);
rect.graphics.drawRect(1, 1, 5, 5)
rect.graphics.endFill();
addChild(rect);
 
var point:Point = new Point();
var tf:TextField = new TextField();
tf.multiline = true;
tf.autoSize = TextFieldAutoSize.LEFT;
 
for (var j:int = 0; j < 8; j++){
    point.y = j;
        for (var i:int = 0; i < 8; i++){
            point.x = i;
            var ifTrue:Boolean = rect.hitTestPoint(point.x, point.y, true);
            tf.appendText(ifTrue ? "O" : "X");
        }
    tf.appendText("\n");
}
tf.x = 24;
tf.y = 24;
addChild(tf);
При изменении аргумента shapeFlag результаты следующие:
Код AS3:
true:
 
XXXXXXXX
XXOOOOOX
XXOOOOOX
XXOOOOOX
XXOOOOOX
XXOOOOOX
XXXXXXXX
XXXXXXXX
Код AS3:
false:
 
XXXXXXXX
XOOOOOOX
XOOOOOOX
XOOOOOOX
XOOOOOOX
XOOOOOOX
XOOOOOOX
XXXXXXXX
Вопросы: почему bounds, на который реагирует shapeFlag, не прямоугольник, а L-образная линия? Я так понимаю, при использовании shapeFlag=false должен получиться прямоуголник 7x7.

Добавлено через 45 часов 34 минуты
Возможно Bounds идет слева и сверху по внутреннему краю, поэтому рамка получается L-образная ?