AS3 - сделать объект скрывающим определенные объекты - PullRequest
0 голосов
/ 17 марта 2012

Правильно, вот сценарий: у меня есть 4 объекта, A, B, C и D. Я хочу, чтобы C затемнял A, но не B. Аналогично, я хочу, чтобы D затемнял B, но не A. A и B могут перекрывать друг друга в любом порядке, это не имеет значения.

Другими словами, я хочу, чтобы объект (C) мог покрывать один объект (A), но не другой (B), даже если он соприкасается с ним. То же самое с D, который может покрывать B, но не A, даже если он соприкасается с ним. Проблема в том, что я не могу придумать конфигурацию слоя, которая позволяет это: D всегда будет выше, чем и A, и B, и, следовательно, будет скрывать оба.

Я не ожидаю, что кто-нибудь придумает какую-то невероятно умную конфигурацию, но мне интересно, есть ли какой-нибудь ActionScript, который может это сделать. В частности, я хотел бы, чтобы A и B были динамическими TextFields, а C и D были MovieClips любой формы (то есть не прямоугольник).

Надеюсь, что это возможно!

Ответы [ 3 ]

2 голосов
/ 17 марта 2012

Вы можете использовать блиц, когда вы на самом деле не добавляете элементы на сцену, а вместо этого используете copyPixels () или draw () для рисования пикселей. Если вы это сделаете, то сможете определить, какие части объектов будут или не будут нарисованы. Ознакомьтесь с этой записью в блоге для обзора техники http://www.developria.com/2010/02/dealing-with-bitmapdata.html.

2 голосов
/ 17 марта 2012

Порядок, в котором вы добавляете их на сцену, определяет, что появляется перед чем.По сути, все, что добавлено последним, находится сверху, все, что добавлено первым, находится снизу.

Если вы хотите, чтобы C покрывал A, но не B, а D покрывал B, но не A, у вас есть проблема.Подумайте, что случилось бы, если бы все четверо перекрывали друг друга.C будет пытаться прикрыть A и позволить B показать сквозь, в то время как D будет пытаться прикрыть B и позволить A. показать сквозь.Не возможно.

0 голосов
/ 17 марта 2012

Если я понял, что вы хотите, используйте функцию setChildIndex() родительского / содержащего MovieClip.Если все ваши объекты ABCD содержались в MovieClip с именем parent_mc, вы можете сделать что-то вроде:

parent_mc.setChildIndex(a_mc, parent_mc.numChildren-1); // Throw "a_mc" on top
parent_mc.setChildIndex(b_mc, parent_mc.numChildren-1); // Throw "b_mc" on top

Это приведет к тому, что b_mc окажется поверх a_mc и т. Д.

Вы также должны добавить что-нибудь в самый конец списка отображения:

 parent_mc.setChildIndex(b_mc, 0);

документация здесь: DisplayObjectContainer.setChildIndex ()

...