Как остановить Flex / AIR XOR-ing заливку?

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

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

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

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

Ответ после принятия:

Спасибо, Christophe Herreman! Изменение кода на:

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

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


person Mark Ingram    schedule 24.02.2009    source источник


Ответы (2)


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

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

g.beginFill(0xFF0000);
g.drawRect(0, 0, 50, 50);
g.beginFill(0xFF0000);
g.drawRect(25, 25, 50, 50);
g.endFill();
person Christophe Herreman    schedule 24.02.2009

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

person anopres    schedule 24.02.2009