Flash - menyer og actionscript

Flash - menyer og actionscript

Innleggav segrov » tor 26.04.2007 18:26

Dette er et todelt spørsmål.

Først av alt lurer jeg på om noen kan anbefale et bra flash-forum nå som storedyret.com er nede.

Det andre er at jeg vrenger hodet mitt i å lage en avansert drop-down-meny.
Det er enkelt å få en drop-down til å falle ned når jeg tar musen over det utløsende feltet, men når jeg flytter musa over den nye menyen, lukker den seg fordi jeg har satt en mouseout på samme knapp.

Er det noen som har et tips på en god tutorial for litt mer avanserte drop-down-menyer?

her ser dere smultring-drop-down-menyen min:
http://filer.nucleus.no/adeb/basic%20functions.swf
Sist endret av segrov den tir 30.10.2007 11:35, endret 2 ganger.
medlem i 196 måneder
 

Innleggav haartufs » tor 26.04.2007 18:30

Nå har du drop down menyen i samme knapp, right?
Hva med å bruke et eget movieclip med en visible true/false variabel?

Brukerens avatar
medlem i 166 måneder
 

Innleggav decodex » tor 26.04.2007 19:31

To anbefalinger rundt teknikk:

1. Bruk heller movieclip fremfor button, og legg undermenyen som et movieclip inni hovedvalget, slik at mouseover på undermenyen ikke fører til mouseout på hovedvalget.

2. Om du får luft mellom hovedvalg og undermeny hvor musen kommer utenfor movieclip'et, kan du vurdere å deaktivere undermeny kun når man flytter musen over et annet hovedvalg (dvs. lagre aktivt hovedvalg et sted og deaktivere det ved mouseover på andre hovedvalg).

Ellers er det eneste ressursnettstedet (forum, artikler) jeg kommer på innenfor Flash for øyeblikket: kirupa.

Brukerens avatar
medlem i 165 måneder
 

Innleggav iBruker » tor 26.04.2007 19:59

Offtopic:
Er ganske ny i Flash og Actionscript.
Kan noen fortelle meg Actionscrip koden vis jeg vil at når man trykker på en knapp skal man hoppe til neste scene?

Brukerens avatar
medlem i 155 måneder
 

Innleggav Incrediboy » tor 26.04.2007 20:13

iBruker:

on (release) {

gotoAndPlay("navn_på_scene", 1);

}

Hvor 1 tallet står for hvilke frame du vil starte på. Somregel nr1

Brukerens avatar
medlem i 173 måneder
 

Innleggav perfle » tor 26.04.2007 20:39

Hva om du legger inn en if-løkke under mouseout? En if som sjekker om musa kolliderer med menyen som er oppe.

EDIT: Forresten, hvis man beveger musa fort over kakestykkene blir linjene på sidene hengende igjen :P (For øvrig er smultring/ananasskiva di herlig deilig!)
Sist endret av perfle den tor 26.04.2007 20:48, endret 1 gang

Brukerens avatar
medlem i 163 måneder
 

Innleggav segrov » tor 26.04.2007 20:42

Hvordan trigger jeg movieclip? Med on(mouseover) ? Er det akkurat på samme måte som med en knapp?

Grunnen til at jeg ikke har lagt menyen i samme clip, er fordi jeg det blir trøbbel med hva som kommer øverst og underst i "smultringen". Om dere ser på modellen, ligger alle knappene oppå hverandre. En garantert god måte å skaffe seg selv trøbbel:)
medlem i 196 måneder
 

Innleggav Incrediboy » tor 26.04.2007 20:49

slik er et eksempel på hvordan du trigger et movieclip:

on(press) {

mask_mc.play();

}

Her er denne action lagt på en knapp for å starte en maskering

Brukerens avatar
medlem i 173 måneder
 

Innleggav perfle » tor 26.04.2007 20:49

segrov: Kan du kopiere mouseover- og mouseout-koden? Så kan jeg legge inn if-en.

Brukerens avatar
medlem i 163 måneder
 

Innleggav decodex » tor 26.04.2007 20:50

Hm, jeg tenkte ikke på layer-problemet nei.. Du bruker ikke «on (mouseover) { ... }» for movieclips nei, men noe lignende:

Kode: Merk alt
this.onmouseover = function () {
// ...
};


Skal funke, om jeg ikke husker feil. En stund siden jeg kodet noe i ActionScript, men det er jo i bunn og grunn det samme som JavaScript.

Da er min innskytelse om løsning for øyeblikket at du ikke skjuler undermeny ved mouseout, men ved mouseover på et annet hovedmenyvalg (jeg synes vel det på sett og vis er mer brukervennlig også). Men jeg er litt sliten og trøtt for øyeblikket, så mulig jeg ikke kommer med de friskeste idéene :)

perfle: Ditt if-forslag avhenger av at det ikke er noe luft mellom hovedvalget og undermeny hvor musepekeren vil være utenfor begge under bevegelse mot undermeny. Bare tenkte påpeke det i alle fall :)

Brukerens avatar
medlem i 165 måneder
 

Innleggav segrov » tor 26.04.2007 23:08

Ok, nå har jeg tenkt litt, og det med kollisjon var jo egentlig en enkel og håndgripelig måte å gjøre det på, og det ser ut til å funke sånn 90% :) :o :)

Jeg har laget usynlige knapper som skrur seg av og på. Det som virkelig frustrerer meg er at jeg ikke klarer å få 2 knapper til å snakke sammen 100%.

På smultringen min, holder menyen seg åpen ca 3 av 4 ganger, men ikke ellers. Jeg ser at om jeg holder musa inne, holder den seg åpen konsekvent, men det er jo ikke planlagt akkurat..

http://filer.nucleus.no/adeb/basic%20functions.swf

Takk for masse hjelp så langt.
medlem i 196 måneder
 

Innleggav perfle » fre 27.04.2007 0:12

Det er vel på grunn av området mellom kakestykket og menyen. Kanskje om du lager et litt bredt hit-område? (På menyen, altså.)

Brukerens avatar
medlem i 163 måneder
 

Innleggav segrov » fre 27.04.2007 10:22

Jeg har laget et ekstra bredt område. De dekker hverandre 100%. Det er bare at flash noen ganger gjør sin on(mouseout) på kakestykket, før den gjør en on(mouseover) på selve menyen.

Jeg skal nå prøve å legge inn en forsinkelse på lukkingen, slik at den rekker å registerere on(mouseover).
medlem i 196 måneder
 

Innleggav segrov » tir 30.10.2007 11:43

Jeg gjennopliver tråden litt her siden jeg har jobbet litt med optimalisering av kode.

Jeg har 8 knapper og 8 flv-filer som skal vises, og jobber med forskjellige måter å skrive koden på. Nå har jeg satt opp en videoplayer som funker bra med basic kode, men ikke med min nye, optimaliserte kode :-/

Kode som skal ut: (altså det er kun tallet på knapp1_btn og klipp1.flv som endrer på hver knapp.)

Kode: Merk alt
knapp1_btn.onRelease = function() {
_root.film_mc.flv.contentPath = "klipp1.flv";
}

knapp2_btn.onRelease = function() {
_root.film_mc.flv.contentPath = "klipp2.flv";
}

knapp3_btn.onRelease = function() {
_root.film_mc.flv.contentPath = "klipp3.flv";
}


Jeg tenkte at dette var en enkelt sted å eksperimentere litt med looper for å optimaliserer koden, og det gikk nesten bra.

Mitt forsøk på optimalisert kode

Kode: Merk alt
var antKnapper:Number = 8;

for (knappenummer:Number = 1; knappenummer<antKnapper; knappenummer++) {

   _root["knapp"+knappenummer+"_btn"].onRelease = function() {

      _root.film_mc.flv.contentPath = "klipp" + knappenummer + ".flv";
   };
};




Problemet mitt blir da at når jeg trykker på knapp3_btn (eller hvilken som helst annen knapp) så blir resultatet at jeg får se klipp8.flv


Noen forslag?
medlem i 196 måneder
 

Innleggav decodex » tir 30.10.2007 15:15

Et ærlig forsøk :) Problemet her har med closure å gjøre. Funksjonen du tildeler onRelease-hendelsen for hver av knappene dine, blir selvfølgelig ikke kjørt før man faktisk trykker på knapper. Dette betyr at bruk av variabelen «knappenummer» inni denne funksjonen kun blir en peker til den faktiske variabelen som brukes i for-løkken. Siden denne variabelen til slutt ender opp med å inneholde tallet 8, vil alle knappers onRelease-funksjon referere til denne verdien.

Litt keitete forklart. Men, en løsning på dette er at du lagrer en kopi av verdien til «knappenummer» for hver knapp, og bruker denne variabelen inni onRelease. F.eks.:

Kode: Merk alt
var antKnapper:Number = 8;

for (var knappenummer:Number = 1; knappenummer <= antKnapper; knappenummer++) {
   var knapp = _root["knapp"+knappenummer+"_btn"];
   knapp.klippNummer = knappenummer;
   knapp.onRelease = function() {
      _root.film_mc.flv.contentPath = "klipp" + this.klippNummer + ".flv";
   };
};


Har tatt meg den friheten å korrigere et par slurveting i for-løkken også, og så bør du korrigere min deklarasjon av knapp-variabelen til å ta med typen objekt dine knapper er.

Brukerens avatar
medlem i 165 måneder
 

Neste

Returner til Flash / Silverlight



Hvem er i Forumene

Registrerte brukere: Google [Bot]