Avatar billede jakwag Nybegynder
11. juli 2003 - 12:13 Der er 13 kommentarer og
1 løsning

on Data

hej

Hvordan får jeg det her til at virke?

numberOfPics = 10;
//********************************
for (var i = 0; i<numberOfPics; i++) {
    this.createEmptyMovieClip("pic"+i+"_mc", i);
    this["pic"+i+"_mc"].onData = function() {
        this._x = 103-this._width/2;
        trace("data");
    };
    this["pic"+i+"_mc"].loadMovie("testpics/born"+i+".jpg");   
}

Den tracer ikke endgang "data"?!?

køre onData når der begynder at komme data ind, eller når al dataen fra f.eks. en loadmovie er kommet ind?

: ) Jakob
Avatar billede mat Nybegynder
11. juli 2003 - 14:17 #1
et gæt er at din onData event handler bliver overskrevet af det nye indhold i movieclippet, test evt med den gammeldaws onClipEvent (data) (og et alm oprettet movieclip)

Det er forskelligt hvordan onData affyres, men det er tilnærmelsesvis ved hver frame der er loaded af f.eks en ekstern swf. Ved et jpeg gætter jeg så på at det er een gang og når billedet er loadet helt ind.

mvh mat
Avatar billede jakwag Nybegynder
11. juli 2003 - 14:56 #2
mat > Tak.

Ja, den bliver da overskrevet. I starten så den sådan her ud:

numberOfPics = 10;
//********************************
for (var i = 0; i<numberOfPics; i++) {
    this.createEmptyMovieClip("pic"+i+"_mc", i);
    this["pic"+i+"_mc"].loadMovie("testpics/born"+i+".jpg");
    this["pic"+i+"_mc"].onData = function() {
        this._x = 103-this._width/2;
        trace("data");
    };
}

Men det giver samme resultat.

Jeg skal bruge dynamisk oprettede clips, så jeg kan ikke bruge onClipEvent.
Avatar billede mat Nybegynder
11. juli 2003 - 15:04 #3
reelt set tror jeg ikke der er nogen forskel på de to ovenstående formuleringer.

onData oprettes inde i dit pic+i+_mc og bliver derfor fjernet når der loades indhold ind i dette. Du kan prøve at oprette et dummy mc inde i pic+i+_mc´sne og loade derind.

createEmptyMovieClip er praktisk men du kan da også sagten duplikere et movieclip med en flash 5 event handler.

mvh mat
Avatar billede jakwag Nybegynder
11. juli 2003 - 16:50 #4
Her er måske noget:

http://www.eksperten.dk/spm/355839
http://www.kenike.org/archivos/000057.html

Desværre er jeg ikke så god til spansk... : )

Er der nogen der forstår hvordan det er brugt?
Avatar billede jakwag Nybegynder
11. juli 2003 - 17:00 #5
Nu har jeg skåret HELT til benet:

target_mc.loadMovie("testpics/born2.jpg");
target_mc.onData = function(){
    trace("H")
}

Virker ikke. Det er nok rigtigt at når jpg'et er loaded. Er onData functionen slettet.

Men hvordan så? Der må da være nogen der har prøvet at bruge onData til et eller andet?
Avatar billede mat Nybegynder
11. juli 2003 - 17:08 #6
http://webforums.macromedia.com/flash/messageview.cfm?threadid=610148&catid=288&CFID=1957347&CFTOKEN=dede6f9acca7379f-9373BEF1-B15C-4564-C5C18B0F82367452

prøv at tjekke denne tråd, det ligner umiddelbart en omvej, men så vidt jeg har forstået er onData event handleren i mx reelt værdiløs ved loadMovies?

mvh mat
Avatar billede jakwag Nybegynder
11. juli 2003 - 19:09 #7
Ja, jeg har osse selv kigget lidt omkring, og det virker som om at det er den bedste måde at gøre det på.

Det kan jo være at de laver et nemmere (mere gennnemtænkt) system i næste version, for det her er da for fjollet. Altså at have en onData funktion der forsvinder når der kommer data... he he

Smid et svar - så kommer der 30 mægtige point rullende.
Avatar billede mat Nybegynder
11. juli 2003 - 19:26 #8
Jeg synes egentlig også at det er lidt underligt. Og jeg havde håbet der var flere der havde haft nogle bud på hvordan man ellers skal opfatte det. Så det kan være vi skal lade stå åbent lidt endnu? :)
Avatar billede kragekjaer Praktikant
12. juli 2003 - 00:36 #9
de links som jakwag giver er løsningen, har nemlig benyttet mig af den løsning. Det er en bug i flash, den fjerner alt fra mc´et når man bruger onData
Avatar billede jakwag Nybegynder
14. juli 2003 - 13:39 #10
Det er jo enelig ikke en bug at den fjerner alle variabler, sådan burde det jo også fungere. Men de har selvfølgelig ikke tænkt sig om da de så lavede den onData method. Nærmest lidt komisk.
Avatar billede jakwag Nybegynder
14. juli 2003 - 14:33 #11
Ja, linket http://www.kenike.org/archivos/000057.html virker.

Min kode ser sådan her ud:

MovieClip.prototype.oldLoadMovie = MovieClip.prototype.loadMovie;
MovieClip.prototype.loadMovie = function(url, vars) {
    trace("load movie")
    if (this.onData != undefined && this.onData != null) {
        this._parent.createEmptyMovieClip("__fixEvents", 7777);
        this._parent.__fixEvents.theTarget = this;
        this._parent.__fixEvents.onData = this.onData;
        if (this.onLoad != undefined && this.onLoad != null) {
            this._parent.__fixEvents.onLoad = this.onLoad;
        }
        this._parent.__fixEvents.onEnterFrame = function() {
            this.oldv = this.v;
            this.v = this.theTarget.getBytesLoaded();
            if (this.v != this.oldv) {
                this.onData.call(this.theTarget);
            }
            if (this.v == this.theTarget.getBytesTotal()) {
                this.theTarget.onData = this.onData;
                if (this.onLoad != undefined) {
                    this.theTarget.onLoad = this.onLoad;
                }
                this.onLoad.call(this.theTarget);
                this.removeMovieClip();
            }
        };
    }
    this.oldLoadMovie(url, vars);
};
//***********************************************************************
numberOfPics = 10;
//********************************
for (var i = 0; i<numberOfPics; i++) {
    this.createEmptyMovieClip("pic"+i+"_mc", i);
    this["pic"+i+"_mc"].createEmptyMovieClip("dummy"+i+"_mc", i);
    this["pic"+i+"_mc"]["dummy"+i+"_mc"].onData = function() {
        trace(this._width)
        this._x = -(this._width/2);
    };
    this["pic"+i+"_mc"]["dummy"+i+"_mc"].loadMovie("testpics/born2.jpg");
    this["pic"+i+"_mc"]["dummy"+i+"_mc"]._x = -(this["pic"+i+"_mc"]["dummy"+i+"_mc"]._width/2);
}

Problemmet er bare at den kalder onData funktionen som den skal, men hvis jeg inde i onData functionen laver en trace:
trace(this._width);
Er output 0. Det er et problem da jeg skal sætte clippets x position efter bredden på clippet.

Jeg kan selvfølgelig bare lave en onEnterFrame der står og tjekker om bredden er 0. Men så kan jeg jo ligeså godt bruge den samme til at tjekke om der er loadet noget ind, og samtidig slippe for alt det ovenstående...
Avatar billede jakwag Nybegynder
21. oktober 2003 - 11:16 #12
Gik lige igennem mine gamle spørgsmål, for at se om jeg skyldte nogle steder. Og mindsandten : ) Læg et svar mat.
Avatar billede mat Nybegynder
21. oktober 2003 - 14:54 #13
well du løste det vel selv?
Avatar billede jakwag Nybegynder
21. oktober 2003 - 14:56 #14
ja lidt, men først da du gjorde mig opmærksom på at alle methods forsvinder ved load. så værsgod. : )
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