Как остановить Flex / AIR XOR-заливку? - PullRequest
2 голосов
/ 24 февраля 2009

Если вы попробуете следующий код:

g.beginFill(0xFF0000);
g.drawRect(0, 0, 50, 50);
g.drawRect(25, 25, 50, 50);
g.endFill();

Вы могли бы подумать, что это нарисует 2 перекрывающихся красных квадрата. Однако это не так - он рисует два красных квадрата, за исключением области перекрытия, которая теперь полностью прозрачна.

Есть идеи, как обойти это?

Post-Принимается-Ответ:

Спасибо Кристоф Херреман ! Изменение кода на:

g.beginFill(0xFF0000);
g.drawRect(0, 0, 50, 50);
g.endFill();
g.beginFill(0xFF0000);
g.drawRect(25, 25, 50, 50);
g.endFill();

Работает так, как задумано! Мне было бы интересно узнать, было ли это «предполагаемым поведением» или же настоящей ошибкой!

Ответы [ 2 ]

4 голосов
/ 24 февраля 2009

Все вызовы до endFill () будут просто сохранять точки многоугольника, который вы хотите нарисовать, и соединять их после вызова endFill (). Поскольку код в вашем примере имеет перекрывающуюся часть, он будет отфильтрован при прорисовке реальных линий многоугольника. На самом деле я не знаю, является ли это предполагаемым поведением проигрывателя Flash или ошибкой.

Чтобы решить эту проблему, просто добавьте новый вызов beginFill () перед рисованием нового прямоугольника.

g.beginFill(0xFF0000);
g.drawRect(0, 0, 50, 50);
g.beginFill(0xFF0000);
g.drawRect(25, 25, 50, 50);
g.endFill();
0 голосов
/ 24 февраля 2009

Разве вам не нужно создавать второй графический объект для применения второй заливки? Могу поспорить, у вас действительно есть один графический объект странной формы вместо двух пересекающихся прямоугольников.

...