Mit håndikon er væk!! – husk det nu

OK. Her kommer et indlæg til jer, som ligeså meget er for min egen skyld. Jeg sad i aftes og brændte rigtig mange unødvendige arbejdstimer af på noget jeg havde løst før. Nu skriver jeg det her på blog’en, så jeg selv og I aldrig falder ned i det frustrationshul igen :-)

Problemet er følgende:
Når jeg opretter et movie clip og vil have det skal opføre sig som en knap, kommer hånden ikke frem, når musen bevæger sig hen over det.

Umiddelbar løsning er:
Husk at sætte buttonMode til true. Når du gør det, kan du bruge useHandCursor til at bestemme om hånden skal vises eller ej. Prøv følgende:

//Opret en sprite. Placer den på din stage i position (50,50)
var knap:Sprite = new Sprite();
addChild(knap);
knap.x = knap.y = 50;

//Tegn en grøn kasse inde i knappen
var kg:Graphics = knap.graphics;
kg.beginFill(0x55CC55);
kg.drawRect(0,0,90,25);
kg.endFill();

//Aktiver knaptilstand for spriten
knap.buttonMode = true;

Den sidste linje får spriten (eller movie clippet) til at opføre sig som en mus. Nu kommer problemet. Hvis du skriver følgende efter:

//Opret et tekstfelt, hvor teksten ikke kan markeres
//og placer den inde i knappen
var tekst:TextField = new TextField();
tekst.autoSize = TextFieldAutoSize.LEFT;
tekst.selectable = false;
tekst.text = "Nu er der tekst i";
tekst.x = tekst.y = 5;
knap.addChild(tekst);

Når du tester filmen, vil du se at tekstfeltet fjerner musehånden fra knappen. Hvis du flytter markøren helt ud til et af hjørnerne vil du se, at den stadig er aktiv – det er tekstfeltet, der er skyld i misæren.

Der er to måder at løse det på. Begge bunder i at det ikke skal være muligt for objekter inde i symbolet at reagere på musens gestus. Hvis du vil forhindre tekstfeltet i at forholde sig til musen kan det gøre således:

tekst.mouseEnabled = false;

Dette vil påvirke den enkelte knap og skrives tit samtidig med oprettelsen af tekstfeltet (når man husker det) :-)

Den anden metode fjerner muligheden for alle objekter inde i knappen. Det er yderst praktisk, hvis knappen er bygget op af mange delobjekter, som du med sikkerhed kan sige, ikke skal bruge musen til noget. Med andre ord: Hvis det kun er knappen som helhed, der skal reagere. Det ser således ud:

knap.mouseChildren = false;

Den sidste er værd at huske på. Men grundlæggende virker det forkert at musehånden ikke virker, når bare teksten ikke er markerbar. Må dette indlæg spare dig for noget bøvl, hvis projektet skulle dreje sig i den retning :-)

/ockley

Leave a Comment