PDA

Volledige versie bekijken : Roterend Menu


BartBacardi
%Europe/Berlin %653 %2006, 16:41
Beste mensen ik heb onlangs op een site een tutorial gevonden met een Roterend menu. Nu had deze persoon losse buttons gemaakt. En een lege Movieclip waar een actionscript in stond om het geheel te laten roteren. Gezien hij een movieclip gebruikte kon ik de achtergrond niet transparant maken.

Nu was mijn idee om de movieclip gewoon te verwijderen en vervolgens het actionscript gewoon in een nieuwe Layer te zetten. Vervolgens het script iets wat aanpassen en hopla het zou moeten werken. Nu is het probleem dat het geheel min of meer nog wel werkt hij bepaalt alleen de mousehit niet meer goed. De code die ik heb is alsvolgt:



_root.onLoad = function() {

a = 0;

speedMax = 0.5;

ctrlSpeed = 0.4;

centre = _root._height * 0.5;
offset = 75;

heightMax = 12;

heightMin = 6;

widthMax = 100;

widthMin = 40;

alphaMin = 20;

maxTextNum = 12;

}
_root.onEnterFrame = function() {


for (i=0; i<(maxTextNum + 1); i++) {
move(i, i-1);
}

function move(textNum, phase) {


a += ctrlSpeed;
// f(x) = sin(phase + a)
sinYpos = Math.sin(phase+(-1/offset*a+1+1/offset*centre-offset));
_root["text"+textNum]._y = (-(offset)*sinYpos)+centre+offset-(-(offset)*-1);


// f(x) = cos(phase + a)
cosYpos = Math.cos(phase+(-1/offset*a+1+1/offset*centre-offset));
_root["text"+textNum]._width = (widthMax-widthMin)/2*cosYpos+(widthMax-widthMin)/2+widthMin;
_root["text"+textNum]._height = (heightMax-heightMin)/2*cosYpos+(heightMax-heightMin)/2+heightMin;


_root["text"+textNum]._alpha = ((100-alphaMin)/2*cosYpos)+(100-alphaMin)/2+alphaMin;
}
}
_root.onMouseMove = function () {


if (_root.hitTest(_root._xmouse, _root._ymouse, true)) {

ctrlSpeed = -1 * (speedMax / centre) * _root._ymouse;
}
}


De FLA heb ik hieronder. Wie ow wie kan me vertellen wat ik fout doe.
En als we dat gedeelte werkend hebben kan ik weer naar de volgende stap en dat is dit menu Dynamisch maken. Ofwel eens kijken of we de tekst uit een database kunnen lezen en vervolgens laten roteren :P

Erwinzzz
%Europe/Berlin %658 %2006, 16:48
if (_root.hitTest(_root._xmouse, _root._ymouse, true)) {

Dit stukje klopt niet, je moet eerst aangeven wat er getest moet worden, bijvoorbeeld:

mijn_MC.hitTest(_root._xmouse, _root._ymouse, true);

Kijk is of dat wel werkt..

BartBacardi
%Europe/Berlin %719 %2006, 18:15
Srry ben nog beginner qua Actionscript. Ik snap wat je bedoelt maar de oplossing echter niet.

Op de plaats waar jij ( mijn_MC ) neer zet had hij dus zijn lege movieclip staan. Ofwel hij berekende de centre van die movieclip en vervolgens checkte hij of de muis in die movieclip kwam. Zou ja dan ging het roteren dus langzamer zodra je dichter bij het midden kwam. Maar goed ik heb dus die movieclip weggegooid en zit met een vak van 150 x 250 als ik me niet vergis met darin wat buttons. Ik moet dus als ik htnu goed begrijp dat vak aangeven. Maar dat vak is toch _root?? Of maak ik nu een domme fout.

theFlashWizard
%Europe/Berlin %753 %2006, 19:05
je kan ook gewoon het orgineel gebruiken en de kleur doorzichtig maken toch?
want nu hoort het pas te gaan werken wanneer je over het menu gaat. omdat je nu geen achtergrond hebt, reageert hij pas wanneer je over 1 van de titels gaat.
Een andere oplossing is geen hittest gebruiken maar naar de positie van de muis te vergelijken.
owja, pas even je 1ste bericht aan en haal dan de spatie uit de [ as], dan werkt het namelijk wel.

BartBacardi
%Europe/Berlin %778 %2006, 19:41
Uhm naar mijn weten kun je in flash geen vlak tekenen dat transparant is. Je kunt alleen via publish de achtergrond van het document zelf transparant maken. Dat is dus ook de reden waarom ik die movie eruit verwijderd heb en vervolgens alleen nog maar met het de achtergrond zelf werk dat ik wel transparant kan maken.

Maar als ik het dus goed begrijp heb ik een object nodig om een hittest op uit te voeren. Ik kan dus geen hittest uitvoeren op als het ware het hele flashdocument? Dan moet ik dus muispositie gaan vergelijken. hmm wil try hopelijk kom ik eruit.

Erwinzzz
%Europe/Berlin %782 %2006, 19:46
Jawel dat kan wel. sterker nog, op meerdere manieren.
manier 1 komt in dit geval meer in aanmerking:
1. Teken een vierkant, welke kleur maakt niet uit. Maak er een MC/graphic (in jouwn geval een mc) van. Maak bij properties de alpha '0'. Je kan em nu een instancename geven voor een eventuele hitTest of iets anders in AS.
2. Ik geloof dat deze mogelijkheid aleen in Flash 8 aanwezig is. Je kan in iedergeval ook in MX de lijn of de vulling transparant maken. DOe bijvoorbeeld de lijn transparant. De vul kleur kan je ook een alpha mee geven, geef die een alpha van '0'.

Als je het niet begrijpt hoor ik et wel..

BartBacardi
%Europe/Berlin %353 %2006, 09:28
Bedankt erwinzzz.

Het verschil tussen beide oplossingen van jou is me niet duidelijk. Maar het is wel gelukt. De MC was bij mijn origineel idd een zwartvlak met transparante lijn. Nu heb ik de Alpha van dat vak idd op 0 gezet en hij is transparant.

Bedankt aan alle mensen die me geholpen hebben en vooral Erwinzzz met zijn oplossing.

Erwinzzz
%Europe/Berlin %641 %2006, 16:23
Ja ik denk dat je het verschil niet begrijpt omdat je met MX werkt, en die functie daarin nog niet zit, tenminste voor zover ik weet.

Zou je miss ff willen laten zien wat het eindresultaat is ik ben wel benieuwd!

theFlashWizard
%Europe/Berlin %974 %2006, 00:23
die functie zit in mx in de color mixer volgens mij (shift-f9 ofzo)

Erwinzzz
%Europe/Berlin %287 %2006, 07:53
o ok, maar bij flash 8 is hij makkelijk te gebruiken..

BartBacardi
%Europe/Berlin %463 %2006, 12:07
www.maatschappelijkestage.org/main.html


Daar kun je kijken wat het resultaat is geworden.

papirosn
%Europe/Berlin %518 %2006, 13:26
Afgezien van een lopend mannetje zie ik helemaal niets.

BartBacardi
%Europe/Berlin %526 %2006, 13:38
Hmm je hebt gelijk.

http://www.maatschappelijkestage.org/menu.swf
Alleen achtergrond is transparant normaal :P

Geen idee waarom hij op mijn server niet werkt op me bureaublad wel. Dat lopende mannetje doet het idd wel :S