Avatar billede jakwag Nybegynder
24. januar 2006 - 15:52 Der er 8 kommentarer og
1 løsning

er musen inde i flash eller ej?

Hej

Er støt på et lille problem som jeg ikke kan løse. Mærkeligt nok er jeg aldrig støt på en sådan situation før.

Jeg har en menu lavet i flash, resten af siden er i alm. html. Hvordan menuen er, er ikke vigtigt her, men det er vigtigt for mig at jeg på en måde kan se om cursoren er over flashen eller ikke. Problemmet opstår af at _xmouse og _ymouse sætter sig fast hvis musen ikke er over flashen.
Dette betyder at hitTest tror at musen er et andet sted end den er...

Se her hvad jeg mener: http://www.contentdepot.dk/exp/hit/

køre man over siden tror den stadig at musen er over den blå (plate).

Koden i eksemplet er:

function tjek()
{
    if (plate.hitTest(_xmouse, _ymouse))
    {
        stat.text = "over";
    }
    else
    {
        stat.text = "out";
    }
}
var tjekIt = setInterval(tjek, 100);

Hvordan løser jeg dette?

: ) Jakob
Avatar billede jakwag Nybegynder
24. januar 2006 - 15:55 #1
Forresten... En almindelig onRollOut bliver trigget når man føre musen væk, så i teorien ville det være en løsning. Men den går desværre ikke da dette jo er til en menu med andet interaktivt på. Rammeer man en anden knap vil den jo også trigge rollOut på "plate".

Ikke desto mindre betyder dette vel at flash godty kan se at cursoren IKKE er over længere...
Avatar billede barklund Nybegynder
24. januar 2006 - 16:02 #2
Den sikreste løsning er at lave det i JavaScript og smide en variabel ind i flash - det vil unikt virke. Det næstsikreste er at lave en lille lytter på musen, der detecter, om forrige position og nuværende position fremskrevet giver en position uden for området - hvis de gør det og hvis næste position er lig med nuværende, så er musen højst sandsynligt ført ud af området. Besværligt, men muligt :)
Avatar billede jakwag Nybegynder
25. januar 2006 - 10:27 #3
hhmm... er det virkelig det eneste man kan gøre? Det er da fladt. Når nu onRollOut gerne må vide det, hvorfor mår jeg så ikke...

Nå, men sådan er det vel så, du ligger vel ikke tilfældigvis inde med et javascript der gør præcis det? ;)
Avatar billede barklund Nybegynder
25. januar 2006 - 10:49 #4
onRollOut ved det heller ikke. Har du en knap, der fylder hele scenen, så bliver dens onRollOut så vidt jeg ved aldrig triggered. Kun ved onDragOut, da man stadig kender musens position, hvis museknappen bliver holdt nede.

I javascript gøres det ved onmouseover og onmouseout-events på object/embed tag - eller en div uden om disse. Derefter skal det sendes ind i flash, hvilket dog ikke er helt nemt i alle browsere - så vidt jeg husker
Avatar billede jakwag Nybegynder
25. januar 2006 - 11:08 #5
jo, den ved det nemlig godt: http://www.contentdepot.dk/exp/hit/

Knappen er større end flashen og skifter farve. derudover er der en action der styre teksten:

plate.onRollOver = function()
{
    stat.text = "over";
}
plate.onRollOut = function()
{
    stat.text = "out";
}

Så noget i flash bliver jo trigget..
Avatar billede barklund Nybegynder
25. januar 2006 - 11:16 #6
Hm, det virkede altså ikke i tidligere flash-versioner - mener jeg bestemt ikke :/

Men lineær regression til at detecte, om den er udenfor, plejer at være ganske præcist - det er meget sjældent, at man kan føre musen ud, uden det detectes - eller detectes selvom man ikke fører den ud.
Avatar billede jakwag Nybegynder
25. januar 2006 - 11:21 #7
nå, det forstod jeg så ikke meget af :) lineær regression??

Jeg finder nok en anden løsning. Tak for de to løsnings forslag, og smid bare et svar.
Avatar billede barklund Nybegynder
25. januar 2006 - 11:31 #8
Altså forudsige koordinatet ud fra de foregående to koordinater. Det kan laves så simpelt som:

var w = Stage.width;
var h = Stage.height;
var k = new Array();
function detectOnMouseMove() {
    // nu er den indenfor
    delete onMouseMove;
    onEnterFrame = testOnEnterFrame;
}
onMouseMove = detectOnMouseMove;
function testOnEnterFrame() {
    var p1 = k.shift();
    var p2 = k[0];
    var df = {x:p2.x + (p2.x - p1.x), y:p2.y + (p2.y - p1.y)};
    var p3 = {x:_xmouse, y:_ymouse};
    var udenfor = df.x < 0 || df.x > w || df.y < 0 || df.y > h;
    var koord_udenfor = p3.x < 0 || p3.x > w || p3.y < 0 || p3.y > h;
    var stille = p2.x == p3.x && p2.y == p3.y;
    if (koord_udenfor || (udenfor && stille)) {
        // nu er den udenfor
        delete onEnterFrame;
        onMouseMove = detectOnMouseMove;
    } else {
        k.push(p3);
    }
}

Det ser da meget sødt ud :)

--
Morten Barklund
Avatar billede jakwag Nybegynder
25. januar 2006 - 11:55 #9
nåå.. lineær regression! Cool udtryk, jeg skulle nok være blevet i skolen lidt længere ;)

Tak for koden
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester