Avatar billede doodoo Novice
07. februar 2007 - 14:01 Der er 9 kommentarer og
1 løsning

Hvordan skalerer jeg automatisk

Hej EXP'er

Jeg søger en tutorial til hvordan jeg kan få flash objekter til at skalere sig efter sidens indhold
som denne: http://www.dynamicfactory.us/xmlswfnew/first/index.html

Det er mega fedt lavet! - nogle der kan fortælle mig hvordan via en toturial?
Avatar billede maqhem Nybegynder
07. februar 2007 - 14:52 #1
_width og _height på rootens indhold kan findes ved _root._width og _root._height.
Men det er ikke den, der er benyttet hér. Det er med garanti et tomt movieclip, hvor forskellige andre movieclips loades ind i. Når de så er loaded ind, sættes _alpha til 0, hvorefter en ramme sætter sin _width og _height dynamisk til eksempelvis container._width + controlPanel._width + extraSpaceX og container._height + controlPanel._height + extraSpaceY, mens den samtidigt skifter _x- og _y-værdier. Den dynamiske effekt kan nemt opnåes ved en lille funktion lidt al à:

dynamicTransform(mc, 500, 150);
function dynamicTransform(o:MovieClip, w:Number, h:Number):Void {
    var acceleration:Number = new Number(25);
    var accuracy:Number = new Number(0.5);
    o.onEnterFrame = function() {
        o._width += (w - o._width) / 100 * acceleration;
        o._height += (h - o._height) / 100 * acceleration;
        o._x -= (o._x - (Stage.width - w) / 2) / 100 * acceleration;
        o._y -= (o._y - (Stage.height - h) / 2) / 100 * acceleration;
        if(o._width + o._height > w + h - accuracy) {
            o._width = w;
            o._height = h;
            o._x = (Stage.width - w) / 2;
            o._y = (Stage.height - h) / 2;
            delete o.onEnterFrame;
        }
    }
}
Avatar billede maqhem Nybegynder
07. februar 2007 - 14:57 #2
Og hvis vi vil ud i den idiotsikre, kan der tilføjes delete o.onEnterFrame; lige efter initialiseringen af accuracy.
Avatar billede doodoo Novice
07. februar 2007 - 16:02 #3
Hey Maghem

Tak for det - men det var netop derfor jeg søgte en Tutorial så jeg kunne følge med fra ende til anden og ikke "lidt al á " :) sry
Avatar billede maqhem Nybegynder
07. februar 2007 - 16:47 #4
1. Mit navn er med Q ikke G ;)
2. Ups, min fejl. Hér får du en beskrivelse af mit script, hvis du kan bruge det:

  // kalder funktionen
dynamicTransform(mc, 500, 150);
  // opretter en funktion, der kan skallere et movieclip o til størrelserne w og h
function dynamicTransform(o:MovieClip, w:Number, h:Number):Void {
  // opretter en variabel, der definerer hastigheden af skalleringen
    var acceleration:Number = new Number(25);
  // opretter en variabel, der definerer, langt fra målstørrelsen mc'et må være, før det strækkes helt ud
    var accuracy:Number = new Number(0.5);
  // opretter en onEnterFrame, som er en funktion, der kaldes én gang hver frame
    o.onEnterFrame = function() {
  // sætter bredde på mc'et til acceleration antal procent "mere" den endelige størrelse
        o._width += (w - o._width) / 100 * acceleration;
  // sætter højde på mc'et til acceleration antal procent "mere" den endelige størrelse
        o._height += (h - o._height) / 100 * acceleration;
  // flytter mc'ets x-position til en mere passende, så det står i midten af skærmen
        o._x -= (o._x - (Stage.width - w) / 2) / 100 * acceleration;
  // flytter mc'ets y-position til en mere passende, så det står i midten af skærmen
        o._y -= (o._y - (Stage.height - h) / 2) / 100 * acceleration;
  // tjekker om størrelsen på mc'et er tæt nok på den endelige størrelse til, at den må gøre alt mellem { og }
        if(o._width + o._height > w + h - accuracy) {
  // sætter mc'ets bredde til den endelige bredde
            o._width = w;
  // sætter mc'ets højde til den endelige højde
            o._height = h;
  // sætter mc'ets x-position til den endelige x-position
            o._x = (Stage.width - w) / 2;
  // sætter mc'ets y-position til den endelige y-position
            o._y = (Stage.height - h) / 2;
  // sletter onEnterFrame, altså sletter funktionen, der kører én gang for hver frame
            delete o.onEnterFrame;
  // lukker if-statement
        }
  // lukker onEnterFrame-funktionen
    }
  // lukker funktionen selv
}

Når funktionen kaldes ved dynamicTransform(bla bla, noget, noget nyt), husker funktionen igennem hele funktionen "bla bla" som o, "noget" som w og "noget nyt" som h. Derfor kan man sætte eksempelvis movieclippets størrelse med en sådan referance inde fra en funktion.

Udregninger er simpel matematik, men jeg kan godt forklare dem, hvis du ønsker dette:

o._width += (w - o._width) / 100 * acceleration;
forøger o's bredde med (w - o._width) / 100 * acceleration, hvilket svarer til noget i denne stil: "acceleration procent af størrelsesdifferancen mellem maksimum og aktuel bredde"

o._height += (h - o._height) / 100 * acceleration;
forøger o's højde med (h - o._height) / 100 * acceleration, hvilket svarer til noget i denne stil: "acceleration procent af størrelsesdifferancen mellem maksimum og aktuel højde"

o._x -= (o._x - (Stage.width - w) / 2) / 100 * acceleration;
formindsker o's x-position med (o._x - (Stage.width - w) / 2) / 100 * acceleration, som svarer til følgende: "acceleration procent af forskellen mellem aktuel og minimum x-position"

o._y -= (o._y - (Stage.height - h) / 2) / 100 * acceleration;
formindsker o's y-position med (o._y - (Stage.height - h) / 2) / 100 * acceleration, som svarer til følgende: "acceleration procent af forskellen mellem aktuel og minimum y-position"

o._width = w;
sætter o's bredde til w, som er maksimumet

o._height = h;
sætter o's højde til h, som er maksimumet

o._x = (Stage.width - w) / 2;
sætter o's x-position til (Stage.width - w) / 2, som betyder "scenens bredde minus maksimumbredde, og så divideret med to"

o._y = (Stage.height - h) / 2;
sætter o's x-position til (Stage.width - w) / 2, som betyder "scenens højde minus maksimumhøjde, og så divideret med to"

Jeg tvivler stærkt på, du finder descideret tutorials til et så lille effektelement. Dette ved de fleste programmører, hvordan man nemt koder sig ud af, og derfor behøves faktisk ingen tutorials, men jeg håber, du kan bruge mit lille forsøg på én :)

Held og lykke med projektet!
Avatar billede maqhem Nybegynder
07. februar 2007 - 16:49 #5
Har du spørgsmål er du mere end velkommen til at spørge mig :)
Avatar billede maqhem Nybegynder
09. februar 2007 - 13:46 #6
... Var det noget, du ikke bruge, eller såger du noget helt andet?
Avatar billede maqhem Nybegynder
09. februar 2007 - 13:47 #7
Okay, jeg prøver lige igen, for det gik vidst lidt galt:

... Var det noget, du kunne bruge, eller søgte du noget helt andet?
Avatar billede doodoo Novice
09. februar 2007 - 14:31 #8
Har ikke haft tid til at sætte mig ordentlig ind i det - så hold on :]
Avatar billede maqhem Nybegynder
09. februar 2007 - 14:38 #9
Yes yes. Nogle steder er mine forklaringer måske lidt spøjse, men så giver du bare besked, så ser jeg, om jeg kan uddybe det.
Avatar billede maqhem Nybegynder
26. februar 2007 - 09:25 #10
Er det brugbart?
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