![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Oct 2009
Сообщений: 1
|
Не могу разобраться по какому принципу hitTestPoint определяет попадание в случае с выставленным shapeFlag
Код и результаты: var rs:Shape = new Shape(); rs.graphics.beginFill(0xAAAAAA); rs.graphics.drawRect(0, 0, 1, 1); addChild(rs); trace(rs.hitTestPoint(rs.x+rs.width/2, rs.y+rs.height/2, true)); trace(rs.x+rs.width/2, rs.y+rs.height/2); > 0.5 0.5 var rs:Shape = new Shape(); rs.graphics.beginFill(0xAAAAAA); rs.graphics.drawRect(0, 0, 2, 2); addChild(rs); trace(rs.hitTestPoint(rs.x+rs.width/2, rs.y+rs.height/2, true)); trace(rs.x+rs.width/2, rs.y+rs.height/2); > 1 1 То есть несмотря на то, что в первом случае точка (0.5, 0.5) попадает внуть блока размером в 1 пиксель, hitTestPoint не считает это пересечением. Или я что-то делаю неправильно? P.S. Делаем все в классе сцены, координаты глобальные. Последний раз редактировалось Zeldan; 27.10.2009 в 01:11. |
|
|||||
|
Привет!
Растолкуйте пожалуйста как работает hitTestPoint(). Я так понимаю, что при создании Rectangle вокруг него образуется Bounds толщиной 1 px, на который должен реагировать hitTestPoint при использовании аргумента shapeFlag = false. Для теста было написано следующее: 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); Вопросы: почему bounds, на который реагирует shapeFlag, не прямоугольник, а L-образная линия? Я так понимаю, при использовании shapeFlag=false должен получиться прямоуголник 7x7. Добавлено через 45 часов 34 минуты Возможно Bounds идет слева и сверху по внутреннему краю, поэтому рамка получается L-образная ? |
|
|||||
|
Zeldan, похоже дело в этой самой однопискельной рамке.
surlac, простите, не работала с этим так мелко - попиксельно, объекты были... побольше. Я так понимаю весь смысл в первую очередь, что при значении true берется форма объекта а при falsе берется именно прямоугольник объекта Цитата:
|
|
|||||
|
Регистрация: Apr 2011
Сообщений: 64
|
решил вставить свое мнение
хоть hitTestPoint в описание для координат проверки установлен Number а работает кажись не с векторными примитивами, а с маской графического обьекта (или отРАСТОРивоной ее частью) т.е. bitmap'ом из-за этого и получается некоторое округление и по координате не .5, а 1 и цвет не черный, а переходный - который как раз вылазит доп оконтовочкой Добавлено через 58 секунд shapeFlag:Boolean (default = false) — Указывает, следует ли выполнять тестирование по фактическим пикселям объекта (true) или по рамке (false). |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:24. |
|
|
« Предыдущая тема | Следующая тема » |
|
|