PDA

Просмотр полной версии : перекрывающие SWFLoader'ы и swf-ки в них


Скрипун
16.11.2011, 04:35
Доброй ночи

Есть 2 SWFLoader'а. Один выше другого. Тот что выше имеет контент который перекрывает мувик нижнего, на котором висит событие CLICK.

CLICK не срабатывает когда над ним есть какой-то другой SWFLoader, даже если пишу:
mouseEnabled=false

То же самое проверил с обычными мувиклипами - работает

alatar
16.11.2011, 14:32
mouseEnabled=false;
mouseChildren=false;

Скрипун
16.11.2011, 18:46
На жаль не помогает, сделал пример:
test2.zip (http://www.fayloobmennik.net/1178172)

mcAnimal - большая площадь, которая НЕ должна учитывать нажатие
clickMovie - клип для нажимания

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955"
minHeight="600">

<fx:Script>
<![CDATA[
protected function swfloader1_completeHandler(event : Event) : void {
//(loader1.content["mcAnimal"] as MovieClip).play();

loader1.mouseEnabled = false;


(loader1.content["clickMovie"] as MovieClip).mouseEnabled = true;
(loader1.content["clickMovie"] as MovieClip).buttonMode = true;
(loader1.content as MovieClip).mouseEnabled = false;
(loader1.content["mcAnimal"] as MovieClip).mouseEnabled = false;
(loader1.content["mcAnimal"] as MovieClip).mouseChildren= false;

(loader1.content["clickMovie"] as MovieClip).addEventListener(MouseEvent.CLICK, click1Handler);
}

protected function swfloader2_completeHandler(event : Event) : void {
// (loader2.content["mcAnimal"] as MovieClip).play();
loader2.mouseEnabled = false;

(loader2.content as MovieClip).mouseEnabled = false;
(loader2.content["mcAnimal"] as MovieClip).mouseEnabled = false;
(loader2.content["clickMovie"] as MovieClip).mouseEnabled = true;
(loader2.content["clickMovie"] as MovieClip).buttonMode = true;
(loader2.content["clickMovie"] as MovieClip).addEventListener(MouseEvent.CLICK, click2Handler);
}

protected function click1Handler(event : MouseEvent) : void {
// TODO Auto-generated method stub
trace("click 1");
}

protected function click2Handler(event : MouseEvent) : void {
// TODO Auto-generated method stub
trace("click 2");
}
]]>
</fx:Script>

<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<mx:SWFLoader id="loader1" x="100" y="100" source="animal_0.swf"
complete="swfloader2_completeHandler(event)"/>

<mx:SWFLoader id="loader2" x="0" y="0" source="animal_0.swf"
complete="swfloader1_completeHandler(event)"/>
</s:Application>

alatar
16.11.2011, 21:15
На жаль не помогает
В вашем случае это надо было навесить на SWFLoader.

Скрипун
16.11.2011, 21:20
если сделать
mouseEnabled=false;
mouseChildren=false;

на весь лоадер, "content" становиться соответственно тоже недоступным...

alatar
16.11.2011, 21:32
Ну можете пойти сложным путем. Когда вы указали
loader1.mouseEnabled = false;
это отключило мышь лишь для SWFLoader, но не для контейнера содержащего загруженный ролик.
Вам к этому спагетти, что уже написано надо дописать
use namespace mx_internal;
loader1.contentHolder.mouseEnabled = false;

Скрипун
17.11.2011, 00:20
Афигеть! Магия! Работает! :)

Art_133
17.11.2011, 01:28
alatar, скажите, пожалуйста, что делает первая строка вашего блока кода?
use namespace mx_internal;
loader1.contentHolder.mouseEnabled = false;

alatar
17.11.2011, 01:42
Дает указание использовать пространство имен mx_internal в котором находится contentHolder.
Почитайте о пространствах имен (namespace) в AS3.