Flash - menyer og actionscript

Innleggav segrov » ons 31.10.2007 11:30

Tusen takk for hjelpen!

Det fungerte veldig bra:) Jeg har ikke helt fått under huden hvordan actionscript bygges opp, men det er jo egentlig logisk det du sier om closure.

Kjenner du til om looper som dette kan brukes til "timing" i filmer også? Jeg har litt stop(); på diverse steder i forskjellige movieclips, men kunne tenkt meg å lokalisere alle disse på et sted i filmen.
medlem i 192 måneder
 

Innleggav decodex » ons 31.10.2007 18:35

ActionScript er basert på ECMAScript, som JavaScript. ECMAScript er et ganske morsomt språk som er litt inspirert av funksjonelle språk som LISP (derav bl.a. støtte for closures). En annen kraftig funksjonalitet er støtte for anonyme funksjoner og å bruke funksjoner som parameter til andre funksjoner (såkalte «first class functions»). Man kan lære mye som kan anvendes i ActionScript ved å kode og lese litt JavaScript (som det jo nå finnes mye info om på nett i disse «Web 2.0»-tider).

Jeg ville nok ikke brukt vanlige for-løkker for tidsstyring av animasjoner i ActionScript. En bedre løsning da er å bruke onEnterFrame-hendelsen, men styre når ting skjer ved å lese av millisekunder som har gått siden sist. Dette er en typisk teknikk for å sørge for at ting animeres like fort selv om maskinen som spiller av ikke takler ønsket FPS.

Når det er sagt så er vel «stop();» nesten det eneste jeg fortsatt bruker til tider direkte på frames - rett og slett fordi det er den greieste måten å unngå at MovieClips automatisk spilles av når de entrer scenen. Finnes måter å unngå dette helt på dog, f.eks. lage en underklasse av MovieClip som automatisk stopper seg selv ved instansiering, og så sette dette som ActionScript-klassen for alle dine MovieClips.

Ble mye «svada» nå kanskje, men lettere å hjelpe om man har en ganske konkret problemstilling :)

Brukerens avatar
medlem i 161 måneder
 

Re: Flash - menyer og actionscript

Innleggav segrov » tir 06.11.2007 23:17

Jeez, Decodex - jeg er imponert over kunnskapene dine:) er du koder eller designer?

Et problem jeg ofte har er å flytte et objekt over en gitt tidshorisont (dvs antall frames). Jeg gjør det nå ved å lage en film med to frames, som simpelthen er en teller. røft gjengitt gjør jeg det slik:

Kode: Merk alt
onEnterFrame {
variabel = +1}


Er det slik du også gjør det?

(Mitt problem er at dette blir ganske grapsete kode fordi onEntereFrame ligger da på timeline inne i flashen min et sted, og andre som skal jobbe i flashen min, har ingen mulighet til å kunne finne denne uten å lete masse. Men er dette lettest, så gjør jeg det slik:)
medlem i 192 måneder
 

Re: Flash - menyer og actionscript

Innleggav decodex » tir 06.11.2007 23:49

Takktakk :) Jeg er nok hovedsakelig en koder, men klarer meg greit i Photoshop o.l. også.

Jeg vil skille på tid og antall frames. Man angir kun en optimal FPS i Flash, og kan aldri stole på at man oppnår det ved avspilling. Så om du ønsker å animere noe over tid er det best å basere seg på tiden som har gått i millisekunder ved avspilling fra frame til frame.

Ditt eksempel er nok slik jeg også ville gjort det, om jeg skulle animert noe via ActionScript over et gitt antall frames. Derimot ville jeg forsøkt å unngå legge koden på tidslinjen, som du selv nevner fort blir rotete for både deg selv og andre. Jeg er mer tilhenger av å lage egne klasser for MovieClip-objekter, som jeg skriver koden i.

Vedlegg til dette innlegget fungerte ikke, men du kan laste ned et kjapt eksempel på animasjon av en Ball jeg laget nå. Eksempelet viser animasjon over tid fremfor frames, men prinsippet er mye det samme. Som du ser er det ingen kode på tidslinjen, bare en ActionScript-klasse som er knyttet til Ball-MovieClipet (høyreklikk på klippet i Library og se under Linkage… for å se koblingen).

Brukerens avatar
medlem i 161 måneder
 

Re: Flash - menyer og actionscript

Innleggav segrov » ons 07.11.2007 16:28

Ok,

det var et bra eksempel. jeg forstod det som er basic om timing:) Genialt.Tusen takk:)

Nå lurer jeg på hvordan du fikk den ball.as til å snakke med flash-fila. Hvor definerte du lenken fra BallAnimasjon.fla til Ball.as?

Slik ser linkage ut hos meg (jeg bruker CS3):
Bilde
medlem i 192 måneder
 

Re: Flash - menyer og actionscript

Innleggav decodex » ons 07.11.2007 22:28

Aha, jeg bruker CS3 selv, men var usikker på om du gjorde det - derav Flash 8-filen :)

Det som er nødvendig for å koble mot Ball.as her, er å krysse av for «Export for ActionScript», og så angi navnet på klassen i Class-feltet. Når du oppgir «Ball» i Class-feltet leter Flash etter en fil kalt Ball.as, som igjen må ha en klasse deklarert som «class Ball ...» i seg. Flash leter etter klassefiler i samme mappe som .fla-filen, samt andre steder du har lagt til under Classpath i Publish Settings > Flash > ActionScript Settings… (knappen ved siden av valg for ActionScript-versjon). Bruk f.eks. Classpath for ditt bibliotek med generelle klasser du kan gjenbruke i prosjekter.

Det aller meste er objekter i Flash, og spesielt i ActionScript 3.0. Et vanlig MovieClip er derfor styrt av en standard klasse for MovieClips. Ved å lage vår egen klasse som utvider standard MovieClip-klassen («extends MovieClip»), kan vi lage en klasse vi kan pakke inn all funksjonalitet for MovieClipet samtidig som vi får all standard funksjonalitet i MovieClips. I det jeg lager er så godt som all ActionScript-kode i egne klassefiler, og så lager jeg bare en visuell struktur og hierarki i Flash. For meg er det mye ryddigere enn å lete gjennom lag med tidslinjer :)

Brukerens avatar
medlem i 161 måneder
 

Re: Flash - menyer og actionscript

Innleggav segrov » tir 27.01.2009 17:14

Må vekke denne tråden til live igjen, for jeg har et problem jeg ikke forstår her, og jeg får ikke sove før jeg får løst det. Jeg har brukt for-loops noen ganger nå, og det funker alltid bra, men ikke denne gangen:0

Jeg har altså 5 knapper som heter slikt: tekstholder_mc.bildebutton_mc.bilde1_btn

Jeg får ikke tak onRelease til å funke på denne måten.

Kode: Merk alt
function lagknapper() {      
   var antKnapper:Number = 5;
   for (var knr = 1; knr <= antKnapper; knr++) {
      this["knapp"+knr] = ["tekstholder_mc.bildebutton_mc.bilde"+knr+"_btn"]
      trace("4: "+["knapp"+knr])
      this["knapp"+knr].onRelease = function() {
         trace("hello");
      };
   };
};

lagknapper();
medlem i 192 måneder
 

Forrige

Returner til Flash / Silverlight



Hvem er i Forumene

Registrerte brukere: Driver155, Google [Bot]