Avatar billede gantz Nybegynder
26. januar 2005 - 17:33 Der er 10 kommentarer og
1 løsning

"_width" og "height" i forbindelse med "if"

Hej med jer,
jeg har lavet denne her expanding box

http://www.kaver.dk/Flash/expanding_box.swf

og er stødt ind i et lille problem, for jeg skal hente eksterne .swf filer ind i kassen, når den har nået størrelsen 100x100, 410x100 eller 100x400.

jeg har den her kode på knapperne

on(release){
_root.Content.targetWidth=100;
_root.Content.targetHeight=100;
var min_farve:Color = new Color(_root.Content.farve);
min_farve.setRGB(0xffffff);
if(_root.Content._width == 100 && _root.Content._height == 100){
    loadMovie("falck.swf", _root.Content.farve);
    }
}

og den her kode på mc'et der skifter størrelse

onClipEvent(load){
_width=400;
_height=400;
speed=10;
}

onClipEvent(enterFrame){
_width+=(targetWidth-_width)/speed;
_height+=(targetHeight-_height)/speed;
}

HVordan sørger jeg for at når kassen har nået sin nøjagtige størrelse (f.eks. 100 px i højde og vidte), så starter den med at hente .swf filen ind i mc'et
Avatar billede barklund Nybegynder
26. januar 2005 - 17:39 #1
Dit script "easer" jo hen imod den ønskede størrelse - men når det i praksis aldrig. Den bliver ved med at komme 1/10 tættere på, hvilket med tiden slet ikke kan ses - men den nås aldrig.

Du er nødt til at "snappe" til sidst - for eksempel når den er én pixel fra:

on(release){
  _root.Content.targetWidth=100;
  _root.Content.targetHeight=100;
  var min_farve:Color = new Color(_root.Content.farve);
  min_farve.setRGB(0xffffff);
  _root.Content.target_url = "falck.swf";
}
...
onClipEvent(enterFrame){
  _width+=(targetWidth-_width)/speed;
  _height+=(targetHeight-_height)/speed;
  if (Math.max(Math.abs(targetWidth-_width),Math.abs(targetHeight-_height)) < 1) {
    _width = targetWidth;
    _height = targetHeight;
    farve.loadMovie(target_url);
  }
}

Men derudover kan det laves en del smartere på nogle punkter - hvis du altså går med til at droppe Flash 5 syntaksen med kode direkte "på" knapper og movieclip i on- og onClipEvent-handlers :)

--
Morten Barklund
Avatar billede gantz Nybegynder
26. januar 2005 - 18:35 #2
mange tak for hjælpen...

den virker ikke 100% for, mc'et bliver godt nok erstattet, men desværre af et blankt mc. Og den .swf  film  som ligger i samme "Mappe", er ikke tomt.

_root.Content.target_url = "falck.swf";      (hvorfor ligger du targe_url i content mc'et)
farve.loadMovie(target_url);                  (og så går videre til mc'et farve)

Selvfølgelig er jeg da med på at gøre det smartere, har du et forslag?
Avatar billede barklund Nybegynder
26. januar 2005 - 19:01 #3
target_url er bare en variabel, som content-movieclippet ved hvor det skal hen. Denne læses så efterfølgende af enterframe-løkken. Hvilken del virker ikke/hvor går det galt henne?

Har du testet af den rent faktisk laver noget, når den når til loadMovie? For eksempel med en lille trace:

    trace("henter "+target_url+" ind i "+farve");
    farve.loadMovie(target_url);

Hvis du tester inde i flash bør der komme en tekst i outputvinduet, når den skal hente en side.

--
Morten Barklund
Avatar billede gantz Nybegynder
26. januar 2005 - 19:17 #4
Hey Morten, output'et bliver gentaget sindsygt mange gange

"henter falck.swf ind i _level0.Content.farve"

hmmm det er da rigtig nok , men som du kan se på

http://www.kaver.dk/Flash/expanding_box.swf

så er mc'et tomt selvom .swf filen ligger der

http://www.kaver.dk/Flash/falck.swf
Avatar billede barklund Nybegynder
26. januar 2005 - 23:38 #5
Ah, selvfølgelig :)

Vi laver det lige helt om og laver en funktion til det:

speed = 10;
sætStørrelseOgUrl(400, 400);
function sætStørrelseOgUrl(w, h, u) {
    Content.h = h;
    Content.w = w;
    Content.url = url;
    new Color(Content.farve).setRGB(0xFFFFFF);
    Content.onEnterFrame = ease;
}
function ease() {
    this._width += (this.w - this._width) / speed;
    this._height += (this.h - this._height) / speed;
    if (Math.max(Math.abs(this.w-this._width),Math.abs(this.h-this._height)) < 1) {
        this._width = this.w;
        this._height = this.h;
        if (this.url) {
            this.farve.loadMovie(this.url);
        }
        delete this.onEnterFrame;
    }
}

Så skal din knap i stedet kalde:

_root.sætStørrelseOgUrl(100, 100, "falck.swf");

Og det burde virke ;)

--
Morten Barklund
Avatar billede gantz Nybegynder
27. januar 2005 - 13:28 #6
HEy Morten,
det er fandme fedt at du gider at lave den kode, men jeg kan ikke få den til at virke. er det muligt at du kan sende mig et eksempel eller specificerer hvad jeg skal gøre. Jeg ligger 30 point oven i?
Avatar billede barklund Nybegynder
27. januar 2005 - 13:42 #7
Du skriver ovenståene scriptet i en enkelt frame ude i root. du fjerner det gamle script, der lå direkte på movieclippet (load og enterframe), du skriver istedet på din knap det nye script:

on (release) {
    _root.sætStørrelseOgUrl(100, 100, "falck.swf");
}

--
Morten Barklund
Avatar billede gantz Nybegynder
30. januar 2005 - 14:40 #8
Hey Morten,
mange tak for hjælpen, smidder du lige et svar, så du kan få dine point.
Avatar billede barklund Nybegynder
30. januar 2005 - 23:29 #9
Yesh yesh :)

Virkede det?
Avatar billede gantz Nybegynder
31. januar 2005 - 08:43 #10
Hey Morten,
jeg fik det ikke til at virke 100% men stjal lidt af din kode, og lavede en anden knap så "Splif" løsning, men det funger. Endnu engang tak for hjælpen
Avatar billede barklund Nybegynder
31. januar 2005 - 10:42 #11
Yesh yesh, tark for points :)
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