Avatar billede dilling-hansen Nybegynder
11. februar 2008 - 14:18 Der er 11 kommentarer og
1 løsning

'swap' et mc med et andet mc, ved klik på knap

det er sådan set som titlen, jeg prøvet at lave en template til at lave presentationer jeg kan bruge i skolen. men er ikke så skide skarp til actionscript, så jeg har lige brugt for lidt pro hjælp her ;)
det er nok nemmest hvis i har noget at kigge på , så her er det jeg har gang i
http://www.myupload.dk/showfile/13434a7baf.rar

og det skulle gerne kunne lade sig gøre at have flere eller færre sider.
håber der er nogen der kan hjælpe :)

(jeg skal på arbejde nu, så kan først prøve/svare i aften)
Avatar billede maqhem Nybegynder
11. februar 2008 - 15:54 #1
Det er primitivt at have en variabel til at fortælle Flash hvor mange sider, din præsentation har. Det kan du få Flash til at tjekke.

Så hvis vi nu siger, at alle frames i maincontent er dine sider i din præsentation, så lav dit actionscript om til følgende:

maincontent.stop();
Check();
_root.btn_forward.onRelease = function(){
    maincontent.nextFrame();
    Check();
}
_root.btn_backward.onRelease = function(){
    maincontent.prevFrame();
    Check();
}
function Check():Void {
    if(maincontent._currentframe == 1) {
        btn_backward._alpha = 20;
        btn_backward.enabled = false;
    } else {
        btn_backward._alpha = 100;
        btn_backward.enabled = true;
    }
    if(maincontent._currentframe == maincontent._totalframes) {
        btn_forward._alpha = 20;
        btn_forward.enabled = false;
    } else {
        btn_forward._alpha = 100;
        btn_forward.enabled = true;
    }
}
Avatar billede maqhem Nybegynder
11. februar 2008 - 15:57 #2
Det er i øvrigt et flot interface, du har lavet. Men du burde nok overveje at gå til Flash CS3 og øve dig på at skrive AS3 i stedet.
Avatar billede maqhem Nybegynder
11. februar 2008 - 16:05 #3
I AS3 vil det se sådan ud:

maincontent.stop();
btn_forward.addEventListener(MouseEvent.CLICK, ControlFrame);
btn_backward.addEventListener(MouseEvent.CLICK, ControlFrame);

Check();

function ControlFrame(E:MouseEvent):void {
    switch(E.target) {
        case btn_forward:
        maincontent.nextFrame();
        break;
       
        case btn_backward:
        maincontent.prevFrame();
        break;
    }
       
    Check();
}
function Check():void {
    if(maincontent.currentFrame == 1) {
        btn_backward.alpha = .2;
        btn_backward.enabled = false;
    } else {
        btn_backward.alpha = 1;
        btn_backward.enabled = true;
    }
    if(maincontent.currentFrame == maincontent.totalFrames) {
        btn_forward.alpha = .2;
        btn_forward.enabled = false;
    } else {
        btn_forward.alpha = 1;
        btn_forward.enabled = true;
    }
}
Avatar billede dilling-hansen Nybegynder
11. februar 2008 - 19:55 #4
Det er lavet i CS3, men fatter minus af AS3, da jeg skiftede til det kunne jeg ikke engang finde ud af at lave en simpel knap xD og jeg synes næsten det er umuligt at finde tutorials til as3 :\
og mange tak for svaret, jeg tester det lige lidt senere, skal lige ned og se Vores planet :)
Avatar billede dilling-hansen Nybegynder
11. februar 2008 - 22:44 #5
Det virker jo som sådan meget godt, men nu røg muligheder for at have noget interaktivt på hver side :\ er der en måde at få det til at virke?
her er lige det jeg er nået frem til indtil videre:
http://www.myupload.dk/showfile/137550056a.rar

og lige et lille sidespring: har tilføjet knapper til at gøre fullscreen og normalscreen, men kan man ikke gøre så når den er i normal, at den skjuler windows rammen? så den sådanset kun viser mit flash?
Avatar billede dilling-hansen Nybegynder
11. februar 2008 - 22:49 #6
lige en ting til der er et større sidepspring... jeg har jo flash cs3, men når jeg skriver i actionscript, så kommer den ikke op med 'hints' (den der liste med funktioner, som den gjorde i tidligere versioner), så vidt jeg kan se er det sat til under properties, men der sker bare ikke noget :\ nogen der ha en idé om hvordan man får det frem igen? det kunne nemlig være en ret god hjælp til en der stadig er ret ny til as :\
Avatar billede dilling-hansen Nybegynder
11. februar 2008 - 23:27 #7
min ellers så bagkloge lillebror kom lige med den simple løsning på det der med at have noget interaktivt på hver side, jeg laver jo selvfølgelig bare et movieclip med indholdet på de forskellige sider, og sætter det ind i movieclippet med siderne xD

men de andre ting er stadig mysterier :P
Avatar billede maqhem Nybegynder
12. februar 2008 - 12:35 #8
11/02-2008 19:55:23
Jeg synes, du skal prøve at søge i hjælpen. Der er et lille kapitel, der hedder Migration (mener jeg), som omhandler forskellene mellem AS2 og AS3. Jeg forstod heller ikke så meget af AS3 i starten, men brikkerne er ved at falde på plads. Det er faktisk logisk nok.

11/02-2008 22:44:56
Du kan da nemt lave interaktive sider, hvis hver side bare er lavet som et movieclip eller har nogle movieclips placeret på scenen. Det er da det mindste problem.
Og ja, du kan faktisk godt fjerne det udenom dit flash, men jeg kender kun Northcode's SWF Studio, der kan klare det - til gengæld kan det klare næsten alting. Det er et rigtig godt program, du burde få fat i. Du kan læse lidt om programmet på [1], og du kan hente en trial-version på [2], hvor du også kan læse lidt om det. Ellers kan du måske ordne det med noget VSC# [3] eller VSVB [3], hvor du implementerer din swf, viser den, og får dit program til at skjule rammen. Jeg har aldrig prøvet, men det kan nok godt lade sig gøre. Men SWF Studio har rigtig mange fede effekter som slash screens og deaktivering af højrekliksmenuen.

11/02-2008 22:49:24
Det kender jeg ikke noget til. Jeg ved, at Flash har en bestemt syntaks, før den viser de gule hints - blandt andet skal du skrive AS2 for at se AS2-hints og det samme for AS3; og for det andet kan Flash vidst ikke så godt lide at vise hints for symboler placeret på scenen, hvis du har trukket dem fra dit library. Prøv med trace:

trace(...

Hvis den ikke laver noget hint, har du fået det slået fra på en eller anden måde. Men det er jo ikke så svært at klare, for de fleste funktioner og metoder lærer man hurtigt udenad, og resten kan man slå op i hjælpen på ingen tid.

11/02-2008 23:27:39
Du har en klog lillebror. Han får lige tommelfingeren.

[1] http://www.northcode.com/v3/about.php
[2] http://www.northcode.com/swfstudio.php
[3] http://www.microsoft.com/express/download/
Avatar billede dilling-hansen Nybegynder
12. februar 2008 - 12:57 #9
wow, så var der sku svar ;P
mange tak for det, nu har jeg lidt at rode med :)
så hvis du lige smider et svar, så skal du da få dine velfortjente point ;)
Avatar billede maqhem Nybegynder
12. februar 2008 - 13:16 #10
Tak, tak.
Avatar billede maqhem Nybegynder
12. februar 2008 - 16:54 #11
Og du skrev noget med, at du ikke engang kunne finde ud af at lave en simpel knap. Jeg vil meget gerne give dig en lille introduktion til ActionScript3 :)

For det første skal du være opmærksom på, at flash ikke arbejder med events på samme måde som i AS2. I det nye AS er syntaksen således:

stage.addEventListener(MouseEvent.MOUSE_MOVE, CursorenHarFlyttetSig);
function CursorenHarFlyttetSig(E:MouseEvent):void { // Void er lavet om til void
    trace("Cursoren har flyttet sig");
}

Hér er stage det objekt, der lytter efter en event. Hvis du hér havde angivet instance-navnet på et symbol placeret på scenen, ville eventen kun blive afviklet, når MouseEvent.MOUSE_MOVE-eventen udføren på symbolet - altså hvis cursoren rører symbolet, og kun dér. Det er faktisk ret smart.

En anden smart ting, de har sørget for, er at lave koden hurtigere. Det har de gjort ved at man skal fortælle Flash alt det, koden indeholder af smarte ting og sager, og så kigger Flash kun efter det. Hvis du benytter ovenstående eksempel alene duer det ikke, for du skal nemlig huske at importere MouseEvent. Den er ikke standard. Det gør du således:

import flash.events.MouseEvent;

De fleste events ligger under flash.events, og når du har slået dine tips til igen, kan du se dem som en lang liste.

Så er der en tredje ting, jeg har ventet længe på fra Flash-udviklernes side af, og det er muligheden for at lave et movieclip på scenen i én vending:

var mc:MovieClip = new MovieClip();

Det er nu muligt! Ovenstående vil lave et nyt movieclip, som du kan gøre med hvad du vil. Men du skal være opmærksom på, at dette movieclip kun ligger i hukommelsen som en ren reference. Hvis du sletter movieclippet mc med delete således...

delete mc;

... vil der ikke være spor rester tilbage af movieclippet. Hvis du til gengæld gerne vil have movieclippet til at være synligt på din scene, skal du lige tilføje referencen mc til din displaylist:

stage.addChild(mc); // eller bare addChild, for stage er scope i roden af din kode

Og wupti - nu er dit movieclip placeret på scenen. Men hvorfor kan man stadig ikke se det? Jo det er jo klart. Movieclippet er tomt. Du kan jo lave lidt fyld i movieclippet med Flash' indbyggede drawRect (import flash.geom.Rectangle) og drawCircle. Men først skal du definere en farve med beginFill selvfølgelig. Du skal bare være opmærksom på, at Flash har flyttet de kreative tegnefunktioner ind i "overmetoden" Graphics:

mc.graphics.lineStyle(2, 0x000088);
mc.graphics.beginFill(0x0000ff, .75); // Alpha er nu en skala fra 0 til 1
mc.graphics.drawCircle(40, 40, 50); // x, y, radius
mc.graphics.endFill();

Flot, eh? Nok ikke. Men det er fremgangsmåden. Hvis du så ikke lige synes, du har lyst til at tegne din tegning med AS, kan du tegne den på scenen og lave den til et symbol, du så kan finde i dit library. Og hér kommer endnu en "migration", for AS3 har skrottet attachMovie til fordel for ovenstående brug af new statement. Find dit symbol i library, højreklik på det og vælg Properties. Ud for Linkage skal du så klikke "Export for ActionScript" og "Export in first frame" til. Som du vil opdage kan du ikke længere skrive noget i Identifer, og det er fordi Flash er blevet meget mere OOP-fikseret (objektorienteret programmering). Nu skal du i stedet angive en klasse i Class. Prøv at skrive MySymbol og tryk Ok.

Og hvad kan man så bruge det til? Tjah, du kan jo prøve at skrive sådan hér i dit actionscript:

var symbol:MySymbol = new MySymbol();
addChild(symbol);

Så fixer Flash lige en klasse-contructor, og så kan du bruge dit symbol som en klasse, der extender MovieClip, fordi den har samme metoder og variabler. Og hvis du vil være en del af de hardcore gutter, der sidder og nørkler med Flash hele dagen (uden at nævne navne), kan du lave en klasse til dit symbol. Så det prøver vi lige.

Gem din fil! Og i samme mappe laver du en ActionScript File, som skal hedde MySymbol.as. I den skriver du følgende:

package {
    import flash.display.MovieClip;
   
    public class MySymbol extends MovieClip {
        public function MySymbol():void {
            trace("Jubii. Du har lavet en instans af mig.");
        }
       
        public function GåEnUlideligLangTur():void {
            trace("Nej ikke nu. Jeg gider ikke at gå. Jeg er for doven, for jeg vil meget hellere sidde og lege med Flash hele dagen.");
        }
    }
}

Prøv at trykke Ctrl + Enter. Og hvis du nu vil have at dit MySymbol skal gå en ulidelig lang tur, kan du under din addChild skriver symbol.GåEnUlideligLangTur();, og så vil du se at dit symbol vil brokke sig ret så meget.

Du kan finde meget mere om OOP på internettet og i Flash-hjælpen. Jeg håber, du kunne bruge dette her til noget.
Avatar billede maqhem Nybegynder
12. februar 2008 - 17:06 #12
Og så lige prikken over i'et... Sådan laver du en knap:

var mc:MySymbol = new MySymbol();
addChild(mc);

mc.addEventListener(MouseEvent.CLICK, mcKlik);

function mcKlik(E:MouseEvent):void {
    trace("Der blev klikket på", E.target, "(navn: " + E.target.name + ")");
}
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