13. april 2002 - 01:24Der 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
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:
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)
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
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:
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..
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????
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)
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 ?
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
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.
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
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?
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.