Как остановить 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)


arrow_upward
4
arrow_downward

Все вызовы до 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

arrow_upward
0
arrow_downward

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

person anopres    schedule 24.02.2009