2009-02-24 5 views
2

Если вы попробуете следующий код:Как остановить 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(); 

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

ответ

4

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

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

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

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