Autor Zpráva
FlashManiac
Profil
zdravím, narazil jsem na menší problém.
Mám vytvořeno několik klipů(dva čtverce a kruh)
kruh si pomoci mouseMove přilepím na kurzor a když chci kliknout na nějaký čtverec tak ale tento klik není registrován.. je zřejmě potřeba někde něco nastavit, mohl by dát někdo radu?
dík
import flash.display.Sprite;
import flash.events.MouseEvent;
var circle:Sprite = new Sprite();
circle.graphics.beginFill(0xFFCC00);
circle.graphics.drawCircle(0, 0, 40);
var target1:Sprite = new Sprite();
target1.graphics.beginFill(0xCCFF00);
target1.graphics.drawRect(0, 0, 100, 100);
target1.name = "target1";
var target2:Sprite = new Sprite();
target2.graphics.beginFill(0xCCFF00);
target2.graphics.drawRect(0, 200, 100, 100);
target2.name = "target2";
addChild(target1);
addChild(target2);
addChild(circle);


target1.addEventListener(MouseEvent.CLICK, mouseReleased);
target2.addEventListener(MouseEvent.CLICK, mouseReleased);
function mouseReleased(event:MouseEvent):void {
   trace('neco');
}
stage.addEventListener(MouseEvent.MOUSE_MOVE,chytMuchu);

function chytMuchu(e:MouseEvent):void{
    circle.x=this.mouseX;
    circle.y=this.mouseY;
}
embee
Profil
FlashManiac:
Ono to mozna jde, flash tusim umi propagovat eventy, ale nevim presne jak to funguje... ja bych to asi resil pres hitTest kruhu a objektu pod nim, zavolas ho na klik na kruh.
FlashManiac
Profil
embee:
jasne.. jako tenhle jednoduchy priklad by pres to resit sel..
potiz ale nastane, pokud bych v nejake prezentaci chtel mit misto obyc kurzoru nejaky klip bo pak tam mas tlacitek hodne tak pak to hittestem resit nejde.. a to je prave muj pripad.. tohle byla jen ilustrace :)

zajimave je ze AS2 to mel osefovane dobre.. tam to tak fungovalo.. At uz na StartDrag nebo i na mouseMove
embee
Profil
mrkni na tohle:

http://www.learningactionscript3.com/2007/11/19/stopping-event-propagation/

myslim, ze je to presne to, co resis
FlashManiac
Profil
embee:
no nevím studoval jsem to(i články v nápovědě), ale můj problém to neřeší.. řeší tam jen to jak to udělat, aby pokud máš v rámci jednoho kontejneru několik klipů a tyto klipy mají listener(a také ten kontejner má listener) tyto listenery nepřekrývaly..

ale pokud máš na stage několik oddělených kontejnerů,tak pokud mají oba listener a překrývají se,tak se provede jen listener objektu nahoře, tam je to ošetřené dobře.. ale právě tím to neřeší můj problém..
zkusil jsem ten příklad upravit do tohoto tvaru:
import flash.display.Sprite;
import flash.events.MouseEvent;

var circle:Sprite = new Sprite();
circle.graphics.beginFill(0xFFCC00);
circle.graphics.drawCircle(0, 0, 40);
var target1:Sprite = new Sprite();
target1.graphics.beginFill(0xCCFF00);
target1.graphics.drawRect(0, 0, 100, 100);
target1.name = "target1";
var target2:Sprite = new Sprite();
target2.graphics.beginFill(0xCCFF00);
target2.graphics.drawRect(0, 200, 100, 100);
target2.name = "target2";

addChild(target1);
addChild(target2);
addChild(circle);

circle.x+=30;
circle.y+=30;

target1.addEventListener(MouseEvent.CLICK, mouseReleased);
target2.addEventListener(MouseEvent.CLICK, mouseReleased);
circle.addEventListener(MouseEvent.CLICK, mouseReleased2);
function mouseReleased(e:MouseEvent):void {
   trace('neco');

}
function mouseReleased2(e:MouseEvent):void {
   trace('neco2');
}


když to zkusíš, tak po kliku na kruh se trasuje jen "neco2" ale ne jen "neco", pokud ale kliknes na čtverec pod kruhem mimo čtverec, trasuje se "neco", takže tohle tam funguje..
ale jakmile použiješ ten původní příklad, tak to prostě nechce reagovat.. a to je to co nechápu..
embee
Profil
napadlo me jeste ochcat to - co kdybys ten kruh, ktery mas mit prilepeny na mysi, posunul trochu bokem... kdyz schovas kurzor, nepujde to poznat a pod realnym kurzorem muzes mit volno...
FlashManiac
Profil
embee:
jo.. to me take napadlo.. a pak to skutečně funguje.. ale jak říkám.. tohle je pouze příklad.. v reálu tam ten kruh nebude..ale bude tam složitější útvar a jeho aktivní souřadnice je bohužel přímo uvnitř kde se to tímhle způsobem očurat neda :( proto protřebuju systémové řešení.. a pochybuju že by to AS3 neuměl, když to uměl AS2
embee
Profil
FlashManiac:
no, tezko rict. Jsou veci, ktere v AS3 oproti AS2 proste nejdou udelat, ale vetsinou jsou to veci typu 'delete' atp. Bohuzel nevim, jak tenhle tvuj problem vyresit... az budu v praci pristi tyden, muzu se zeptat naseho flash guru.
FlashManiac
Profil
embee:
tak už jsem to vyřešil !! je to celkem prosté.. ale je vidět, že AS3 je robustní kráva :) stačí přidat dva řádky:
import flash.display.Sprite;
import flash.events.MouseEvent;
var circle:Sprite = new Sprite();
circle.graphics.beginFill(0xFFCC00);
circle.graphics.drawCircle(0, 0, 40);
var target1:Sprite = new Sprite();
target1.graphics.beginFill(0xCCFF00);
target1.graphics.drawRect(0, 0, 100, 100);
target1.name = "target1";
var target2:Sprite = new Sprite();
target2.graphics.beginFill(0xCCFF00);
target2.graphics.drawRect(0, 200, 100, 100);
target2.name = "target2";
addChild(target1);
addChild(target2);
addChild(circle);

circle.mouseEnabled = false;
circle.mouseChildren = false;
target1.addEventListener(MouseEvent.CLICK, mouseReleased);
target2.addEventListener(MouseEvent.CLICK, mouseReleased);
function mouseReleased(event:MouseEvent):void {
   trace('neco');
}
stage.addEventListener(MouseEvent.MOUSE_MOVE,chytMuchu);

function chytMuchu(e:MouseEvent):void{
    circle.x=this.mouseX;
    circle.y=this.mouseY;
}


circle.mouseEnabled = false;
circle.mouseChildren = false;


pak už to normálně funguje.. pokud jsem dobře četl nápovědu.. tak ta vlastnost mouseEnabled zpusobuje, zda ten daný objekt bude dostávat události nebo ne..
ten druhý řádek pak by měl řešit to, zda s tím objektem můžeš ovládat pomocí událsotí myši.. teda možná jsem to pochopil špatně,ale ty tomu budeš asi rozumět líp... stačí si to přečíst na helpu flashe.. jinak stránka, kde jsem na to přišel je zde.
embee
Profil
Ano, ovsem, proc jsem si na to nevzpomnel? :DDD
FlashManiac
Profil
embee:
tak pokud bys mi mohl nějak blíže osvětlit ty dvě vlastnosti.. co přesně dělají, ať tam nepíšu něco čemu nerozumím :D
embee
Profil
FlashManiac:
no ja myslim, zes to popsal tak jak to je. Ja na tuteorii az tak nejsem, spis resim, co funguje :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0