Маски в AIR с ActionScript 3 - PullRequest
       11

Маски в AIR с ActionScript 3

0 голосов
/ 07 декабря 2009

Я пытаюсь создать маску на форме круга в ActionScript 3 (я использую среду Flex AIR). Это связано с экологическим следом, каждый круг представляет одну землю. Этот экологический след находится внутри контейнера. Проблема в том, что маска, кажется, исправлена, хотя картинка плавает. Когда я прокручиваю контейнер вниз, картинка прокручивается очень хорошо, а маска - нет, вырезая верхнюю часть картинки. Я положил этот и другие UIMovieClip в контейнер VBox. Этот контейнер VBox находится внутри еще одного контейнера VBox. Если я положу контейнер Fomer VBox на дно последнего, маска не будет с ним, поэтому круг не будет замаскирован.

mask = new UIMovieClip();
mask.graphics.beginFill(0xFFFFFF);
mask.graphics.drawRect(radius,radius+radius*2*(1-(ecoWeight-Math.floor(ecoWeight))),1000,1000);
mask.graphics.endFill();    
earth = new UIMovieClip();    
earth.graphics.beginFill(0xFFFFFF);
earth.graphics.drawCircle(radius,radius,radius);
earth.mask=mask;
earth.graphics.endFill();

Ответы [ 3 ]

1 голос
/ 07 декабря 2009

Либо добавьте маску в контейнер VBox:

myVBox.addChild(mask);

или поместите маску и фигуру в контейнер, затем переместите контейнер:

var bundle:Sprite = new Sprite();

mask = new UIMovieClip();
...

earth = new UIMovieClip();    
...

bundle.addChild(mask);
bundle.addChild(earth);

myVBox.addChild(bundle);

bundle.x = 100;
bundle.y = 100;

Это фиксирует землю и маску вместе. Я не знаком с UIMovieClip, но вы можете заменить Sprite на UIMovieClip, который я себе представляю. Это лучшее решение для первого, потому что вы вряд ли не забудете снять маску, если вы удалите землю, если не объедините их вместе.

Надеюсь, это поможет.

0 голосов
/ 07 декабря 2009

Я не знаю Flex, я использую Flash CS3, но попробуйте добавить прослушиватель событий, чтобы изменить положение маски. Кроме того, попробуйте убедиться, что вы делаете вещи в правильном порядке. Примените маску и затем поместите все во второй VBox. Другими словами, мой (ограниченный) опыт работы с ActionScript научил меня, что хронология имеет значение.

Кроме того, убедитесь, что все ваши переменные нацелены правильно. В Flash CS3 (опять же, я мог бы извергать тарабарщину), если вы щелкнете мувиклип с дочерним элементом внутри него и не будете специально отключать мышь для дочернего элемента, родитель не будет регистрировать событие.

Удачи!

0 голосов
/ 07 декабря 2009

Маски отстой и часто не делают того, что от них ожидают. Мне повезло больше с BlendMode.ALPHA, используемым вместе с BlendMode.LAYER.

...