Avatar billede pumpin Nybegynder
13. april 2002 - 01:24 Der er 17 kommentarer og
1 løsning

slide menu

jeg har lavede en menu som består af to movieclip et som indeholder en form for en pointer. I det andet MC har jeg mine knapper, de to MC ligger i samme lag ud over det har jeg følgene scripts i frame 1
if (_xmouse < 375 ) {
setProperty ("_root.slider", _x, (-1*_xmouse ) + 750;
} else if (_xmouse > 375 ) {
setProperty ("_root.slider", _x, (-1*_xmouse ) + 750;
} else {
setProperty ("_root.slider", _x, _xmouse);
}
setProperty ("root_drag", _x, _xmouse);

og i frame 2 har jeg
if (_xmouse<375) {
setProperty ("_root.slider", _x, (-1*_xmouse)+750);
} else if (_xmouse>375) {
setProperty ("_root.slider", _x, (-1*_xmouse)+750);
} else {
setProperty ("_root.slider", _x, _xmouse);
}
setProperty ("_root.drag", _x, _xmouse);
gotoAndPlay (1);

og bingo så har man en menu som slider hver sin vej og det viker over alt forventnig lige bort set fra at jeg kan ikke gøre så man kun rykker på menuen når musen er over pointeren. (på nuværeden tidspunkt slider den lige meget om jeg rykker på musen i toppen af skærmen eller i bunden af skærmen) 
hvis du/i ha npogle spg. sender jeg gerne fla filen til jer

//pumpin






Avatar billede paask Nybegynder
13. april 2002 - 07:20 #1
Jeg går ud fra at din pointer er et område på din stage?! Et sted hvor det er muligt at slide menuen, og ellers ikke på resten af stage? Pointer er altså et movieclip, det definerer dit aktive område. Så kan du klare det ved at lave en hitTest i denne stil:

if (_root.pointer.hitTest(_root._xmouse, _root._ymouse)) {
    if (_xmouse<375) {
        setProperty("_root.slider", _x, (-1*_xmouse)+750);
    } else if (_xmouse>375) {
        setProperty("_root.slider", _x, (-1*_xmouse)+750);
    } else {
        setProperty("_root.slider", _x, _xmouse);
    }
    setProperty("_root.drag", _x, _xmouse);
}

Du kan dog tilpasse koden dit formål ret meget. Hvis du istedet for at have et frame loop mellem 1. og 2. frame benytter movieclippet pointers event mouseMove, så vil koden kun blive testet når musen bevæges. Dette vil for det første hjælpe på performance, for det andet et det et user input og derfor kan du benytte updateAfterEvent featuret. Det tvinger Flash parseren til at opdatere din stage oftere end din frame rate, og dermed bliver animationen mere flydende.

Så hold dig bare til 1 frame, og påfør selve dit pointerclip denne kode:

onClipEvent (mouseMove) {
    if (hitTest(_root._xmouse, _root._ymouse)) {
        if (_root._xmouse<375) {
            _root.slider._x = (-1*_root._xmouse)+750;
        } else {
            _root.slider._x = (-1*_root._xmouse)+750;
        }
        _root.drag._x = _root._xmouse;
    }
    updateAfterEvent();
}

Jeg har desuden omformet til dot-syntaks og skåret det fornødne væk. På denne måde bliver menu'erne kun rykket når musen rammer dit pointer clip samt det kører mere flydende.

Jeg kan desværre først komme tilbage engang over middag.
Håber i øvrigt jeg har forstået dig ret - og godmorgen :0)

mvh
paask
Avatar billede paask Nybegynder
13. april 2002 - 07:21 #2
Hov - det her burde være nok, ikke?

onClipEvent (mouseMove) {
    if (hitTest(_root._xmouse, _root._ymouse)) {
        _root.slider._x = (-1*_root._xmouse)+750;
        _root.drag._x = _root._xmouse;
    }
    updateAfterEvent();
}
Avatar billede pumpin Nybegynder
13. april 2002 - 12:45 #3
er du gal jeg kunne lære meget af dig!!
hvis jeg nu godt vil bruge dit sidste oplæg. så skal onClipEvent (mouseMove) {
    if (hitTest(_root._xmouse, _root._ymouse)) {
        _root.slider._x = (-1*_root._xmouse)+750;
        _root.drag._x = _root._xmouse;
    }
    updateAfterEvent();
}
sidde på mit MC som indenholder pointeren (som har instance navnet drag) men hvad skal jeg så gøre med de scripts som jeg har oppe i mine to frames
Avatar billede paask Nybegynder
13. april 2002 - 15:17 #4
Ahh... ok så havde jeg alligevel ikke helt forstået dig ret. Jeg troede du havde defineret et område af stage som aktivt hit area. Men ok, det virker alligevel efter planen.

Hele den oven nævnte kode skal bare sættes på selve clippet. Alt i dine frame loops kan fjernes helt. Ingen kode på frames, kun den her på dit mc:

onClipEvent (mouseMove) {
    if (hitTest(_root._xmouse, _root._ymouse)) {
        _root.slider._x = (-1*_root._xmouse)+750;
        _root.drag._x = _root._xmouse;
    }
    updateAfterEvent();
}

Så virker det hele :0)
Avatar billede pumpin Nybegynder
13. april 2002 - 15:26 #5
hold da kæft det var godt nok meget meget meget meget meget meget nemmer en den metode jeg havde brugt... kan jeg logge dig til at uddybe hittest funktionen så jeg forhåbenlig ikke behøver at spørge om det igen...
Mange tak for hjælpen paaske, det er jeg sku glad for..
Avatar billede pumpin Nybegynder
13. april 2002 - 15:30 #6
men kan man gøre så knapperne i min menu kun bliver active når jeg køre "pointeren" hen over???
Avatar billede pumpin Nybegynder
13. april 2002 - 15:35 #7
jeg har lige et forslag kan man få den til at hitteste på MC som indenholder mine knapper så pointer "flyver" der hen hvor man trækker musen ned på knapper. for på nu værende tidspunkt kan er det jo kun når jeg køre musen hen og "tager fat" i pointeren at den ruller????
Avatar billede paask Nybegynder
13. april 2002 - 15:43 #8
Det var så lidt :0)

Det betaler sig tit at gennemtænke hvad man vil, og først derefter begynde at kode det - men det kræver selvfølgelig at man kender funktionerne, det er klart.

Hittesten tjekker om to objekter berører hinanden. Enten om to movieclips kommer i berøring, som et skud og en pip-fugl eller din curser og et område. Det er fx en af de vigtigeste funktioner til spil, men jeg bruger det lige så tit til normal interface opbygning.

En hitTests opbygning har denne syntaks: MovieClip.hitTest(x, y, shapeFlag); eller MovieClip.hitTest("target");

Her er movieclippet oftest blot det hvorpå koden er skrevet, og dermed er der ikke behov for at angive noget, da keywordet 'this' er default for syntaksen. Du får enten true eller false ud af testen, om et givent (x,y) koordinat (som curserens) er inden for et område eller om to objekter kommer i berøring med hinanden.

ShapeFlag kan undlades at bruges, men er ellers ganske smart. Det afgører om hittesten skal virke på en bounding box - ved false - altså en firkantet box rundt om objekte. Ved at indsætte true virker testen kun når der rammes præcist hvor der er grafik i et clip, og er altså mere fintmålende.

Du må prøve dig lidt frem og se hvad der sker - håber det gav lidt forklaring :0)

Tak for points, og god arbejdslyst.
Avatar billede paask Nybegynder
13. april 2002 - 15:55 #9
Begge spørgsmål kan lade sig gøre :0)

Prøv først selv lidt, for jeg må desværre smutte et par timer igen. Hvis det så stadig ikke virker kigger jeg naturligvis på det igen :0)

mch
paask
Avatar billede pumpin Nybegynder
13. april 2002 - 16:18 #10
helt sikker !!
Avatar billede pumpin Nybegynder
13. april 2002 - 16:40 #11
hehe jeg har fået lavet lidt om på menuen, men nu er den lige som jeg ville have den. det jeg gjore var at flytte script over på det andet movieclip og så slettede jeg _root.slider _x _Xmouse...
så nu er menuen perfekt
total mange gange tak
har du en måde man kan se hvad updateAfterEvent(skal der stå noget her);  gør ?
Avatar billede pumpin Nybegynder
13. april 2002 - 18:43 #12
jeg er stødt på enu et problem som du måske kan hjælpe mig med jeg har jo knapperne i et movieclip og har så det MC på min stage men hvordan får jeg knapperne til at linke til en anden frame eller scene  jeg kan nemlig ikke, jeg har leget lidt med at lave en hittest på knappen men det virker ikke helt.. du må bare sige til hvis du skal have extra points for at besvare overnævnte
Avatar billede paask Nybegynder
14. april 2002 - 00:46 #13
Hej pumpin. Jeg er først lige kommet tilbage igen - godt at se det virker efter planen nu :0)

Mener du, at du ved tryk på knappen i dit mc vil have din main timeline til at gå til en bestemt frame? Så angiver du bare gennem _root som dette:

on(release){
_root.gotoAndPlay("frameLabel / nummer");
}

Hvis du mente noget andet må du lige sige til.

updateAfterEvent(); kan ikke tage parametre, så updateAfterEvent(skal der stå noget her); er ikke rigtigt, der kan nemlig ikke / skal ikke stå noget der - kun updateAfterEvent();

Der sker det, at parseren tvinges til at gennemløbe koden oftere end din fps. Det kan dog kun benyttes på user input, altså events som mouseMove o.lign.

mvh
paask
Avatar billede pumpin Nybegynder
14. april 2002 - 01:01 #14
det virker sku, jeg var ikke klar over at man kunne bruge _root i den forbindelse mange tak. ret mig lige hvis jeg er galt på den bruges root ikke til at henvise fra et MC til noget som ligger på stage?  men hvad nu hvis det ligger  mc1==>mc2==> ogher ligger det så. Bruger man så også bare _root?
nok om det du skal have rigtig mange tak for din hjælp paaske og jeg håber sku det er dig besvare flere af min Spg. 
med Venlig Hilsen
      Troels larsen
Avatar billede paask Nybegynder
14. april 2002 - 01:08 #15
Hey igen :0)

Hvis du angiver gennem _root, så er det en absolut sti. Dvs. uanset hvor mange movieclips du er inde i, så kan du styre main-timeline, eller andre mc's deri ved at benytte _root.

Hvis du istedet vil have det dynamisk, så kan du angive gennem _parent der henviser til det "overliggende" movieclip, altså det hvori dit andet mc er nested. Håber det giver lidt mening ;0)

Godt du kan bruge min hjælp - hvad med den eksterne tekst i øvrigt, virker det?
Avatar billede paask Nybegynder
14. april 2002 - 01:13 #16
Hov - lille tilføjelse til dette "men hvad nu hvis det ligger  mc1==>mc2==> ogher ligger det så"

Så angiver du det således:

_root.mc1.mc2.navnetPåDetDuVilEllerBareGotoThingie
Avatar billede pumpin Nybegynder
14. april 2002 - 02:26 #17
jeg skal indrømme at jeg har ikke fået set på det men jeg gøde i morgen tidlig
Avatar billede paask Nybegynder
14. april 2002 - 02:34 #18
Helt oki :0)
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