Avatar billede kalleballe Nybegynder
17. oktober 2004 - 11:39 Der er 25 kommentarer og
1 løsning

bedste hittest metode

jeg bruger lige nu:
if(_root.hitAera.hitTest(listeners[u]))           
{
trace("vi ramte squ");
}

hvor jeg tjekker om et stort mc hitAera bliver ramt af nogle små (listeners[u])

Problemet er at det virker som om det ikke er helt nøjagtigt, - hvordan kan det være, - er det måske noget med registreringspunktet i nogle af mc'erne?

vh

kalleBalle
Avatar billede barklund Nybegynder
17. oktober 2004 - 14:31 #1
hitTest() hittester på movieclipenes bounding box - ikke deres fysiske form. Derfor vil den være lidt forkert, for alle ikke-firkantede movieclips.
Avatar billede kalleballe Nybegynder
17. oktober 2004 - 15:20 #2
ok, men mine clips er firkanter, - faktisk rektangler så der skulle vel ikke være noget problem.
Avatar billede barklund Nybegynder
17. oktober 2004 - 15:39 #3
Næ, det lyder fint nok.
Avatar billede barklund Nybegynder
17. oktober 2004 - 15:46 #4
Jo, så burde det virke fint. Jeg har aldrig oplevet, at hittest ikke har virket som det skulle. Måske du skal forklare lidt nærmere...
Avatar billede kalleballe Nybegynder
17. oktober 2004 - 16:17 #5
hm, så må det være noget andet, - det der sker er at når hittesten er true så skal det mc der er blevet 'ramt' loade et billede ind i sig ;)

Og her er det jeg ikke synes at det altid sker.

følgende metoder:

    public function checkZoom():Void
    {
                   
           
           
            my_mcl.loadClip("billede.jpg", this.createEmptyMovieClip("imgholder", 1));
           
                       
                       
    }
   
   
    public function onLoadInit(target_mc:MovieClip):Void
    {
       
        target_mc._alpha=0
       
    }
   
    public function onLoadProgress(target_mc:MovieClip):Void
    {

        var mclProgress:Object = target_mc.getProgress(target_mc);
       
        trace(mclProgress.bytesLoaded+" of "+mclProgress.bytesTotal+" bytes loaded");

    }
   
    public function onLoadComplete(target_mc:MovieClip):Void
    {
       
        var fadeClip = function(){
           
            if(target_mc._alpha<=100){
               
                target_mc._alpha++
               
            } else {
               
                clearInterval(fadeClip);
               
            }
           
           
        }
       
        setInterval(fadeClip, 1);
       
    }
   
   
   
}


Jeg har ingen kontakt til onLoadProgress metoden, - dvs. mit target er undefined.
Avatar billede barklund Nybegynder
17. oktober 2004 - 16:44 #6
Får du ikke en compiler error ved ovenstående script? For getProgress er da ikke en funktion på et MovieClip men på MovieClipLoader-klassen.

Derudover kan jeg ikke gætte, hvorfor din hittest ikke fungerer - den ligger jo også i din managerklasse og ikke i ovenstående :)

--
Morten Barklund
Avatar billede kalleballe Nybegynder
17. oktober 2004 - 17:05 #7
her er min manager klasse, - og nej ingen compiler error


class LoadImagesManager
{
    static var listeners:Array;

    static function addListener (li:ZoomIt)
    {
       
        if (listeners == undefined) listeners = new Array ();
       
        listeners.push (li);
       
    }
   
   
   
   
    static function activate (myVal:String)
    {
        trace("myVal = "+myVal);
            if (myVal == "true")
           
            {
           
            _root.container_mc.lowQuality.midQuality._visible = true;
           
                for (var u = 0; u<listeners.length; u++)
                {
                   
                    hitTestClip(u)
                   
                }
               
               
               
            }
           
            else if(_root.procent<800)
           
           
            {
               
                _root.container_mc.lowQuality.midQuality._visible = false;
               
            }
       
        }
       
    static function hitTestClip(u:Number):Void
    {
           
           
            if(_root.hitAera.hitTest(listeners[u]))
           
            {
                trace("vi ramte squ");
               
               
                listeners[u].checkZoom ();
               
                   
            }
           
            else if(_root.procent<800)
           
            {
           
                listeners[u].imgholder.removeMovieClip();
           
            }
       
    }
   
}
Avatar billede kalleballe Nybegynder
17. oktober 2004 - 17:08 #8
kan du sige mig hvordan jeg får onLoadProgress metoden til at arbejde sammen med imgholder?

Jeg vil også gerne have det sådan, at hvis der allerede er loaded noget ind i mit imgholder clip så skal der ikke loades igen men returneres :) Der er jo ingen grund til at loade det samme 2 gange.
Avatar billede kalleballe Nybegynder
17. oktober 2004 - 17:10 #9
Hey, - der skulle jo stå:

var mclProgress:Object = my_mcl.getProgress(target_mc);

så virker det da :)
Avatar billede kalleballe Nybegynder
17. oktober 2004 - 17:16 #10
Kan jeg på en eller anden måde knytte de enkelte mclProgress til en samlet progress, altså i stedet for at den som nu har tjek på hvert enkelt lille clip så giver et samlet indtryk af hvor meget der er loadet. Jeg kan jo godt få totalbytes for hvert clip og så lægge dem sammen, også måske hele tiden måle på progress af hvert clip og give besked til en samlet progress bar som jeg laver, - men jeg ville bare gerne kunne knytte 1 progressbar komponent til alle små 'loads' på samme tid, - hvis det altså kan lade sig gøre ;)
Avatar billede barklund Nybegynder
17. oktober 2004 - 17:18 #11
Igen, du kan gøre lige hvad du har lyst til. Vil du have en funktion på din managerklasse, der returnerer progress for alle clips, der er ved at loade lige nu, så lav den. Vil du teste om imgholder findes inden du loader noget ind i den, så test det. Der er ikke noget hemmeligt eller mærkeligt i ActionScript - du kan sagtens skrive lige det, du har lyst til :)
Avatar billede kalleballe Nybegynder
17. oktober 2004 - 17:19 #12
okay, - get your point ;)
Avatar billede kalleballe Nybegynder
18. oktober 2004 - 09:35 #13
Men jeg har nu et problem, - jeg kan ikke rigtig se hvordan jeg kan få progressbar komponentet til at reagere på input fra flere billeder der loader på en gang.

Er jeg virkelig nød til at lave en gammeldags progress bar eller kan jeg få progress bar komponentet til at opføre sig som en samlet progress bar?
Avatar billede kalleballe Nybegynder
18. oktober 2004 - 09:47 #14
måske kan  jeg bruge pBarInstance.setProgress(completed, total)
Nå, - men tak for snakken, - smid et svar så får du dine points :)
Avatar billede barklund Nybegynder
18. oktober 2004 - 11:21 #15
Yeshyesh :)
Avatar billede barklund Nybegynder
18. oktober 2004 - 11:27 #16
Tark for points :)
Avatar billede kalleballe Nybegynder
18. oktober 2004 - 11:28 #17
tak for hjælpen
Avatar billede kalleballe Nybegynder
18. oktober 2004 - 14:18 #18
Du Barklund, - hvis du lige har tid ;)

Jeg er nød til at loade 1 billede ad gangen, - min ide er så at lave et nyt array af de clips der 'består' hittesten og så loade disse clip en efter en.

Men jeg kan squ ette få mit nye array til at pushe...

her er koden:



class LoadImagesManager
{
    static var listeners:Array;
   
    static var holdListeners:Array;
   



    static function addListener (li:ZoomIt)
    {
       
        if (listeners == undefined) listeners = new Array ();
       
        listeners.push (li);
       
    }
   
   
   
   
    static function activate (myVal:String)
    {
        trace("myVal = "+myVal);
            if (myVal == "true")
           
            {
           
            _root.container_mc.lowQuality.midQuality._visible = true;
           
                var holdListeners = new Array();
               
                for (var u = 0; u<listeners.length; u++)
                {
                   
                    hitTestClip(u)
                   
                }
               
               
            }
           
            else if(_root.procent<800)
           
           
            {
               
                _root.container_mc.lowQuality.midQuality._visible = false;
               
            }
       
        }
       
    static function hitTestClip(u:Number)
    {
           
           
            if(_root.hitAera.hitTest(listeners[u]))
           
            {
                trace("vi ramte squ "+listeners[u]);
               
               
               
                //listeners[u].checkZoom ();
                holdListeners.push(listeners[u]);
               
                // holdlisteners er undefined ??
                trace("holdListeners NY = "+holdListeners);
               
                   
            }
           
            else if(_root.procent<800)
           
            {
           
                listeners[u].imgholder.removeMovieClip();
           
            }
       
    }
   
    static function loadMyImages()
    {
       
       
       
        trace("test");
       
       
       
    }
   
}
Avatar billede kalleballe Nybegynder
18. oktober 2004 - 14:22 #19
okay, - glem det, - jeg havde glemt at få arrayet med over i methoden
Avatar billede barklund Nybegynder
18. oktober 2004 - 14:59 #20
Nej, det ligger statisk på klassen - du havde glemt at initialisere det, det rigtige sted. Du skal ikke skrive "var" foran klasse-variabler - så laver du jo bare lokale variabler i stedet for :)

Derudover, _root-referencer er alt andet end OOP. Don't! Lav en setHitArea-metode og kald den et eller andet sted efter din constructor i flash - det andet er sgu for hackset på den skumle måde ;)
Avatar billede kalleballe Nybegynder
18. oktober 2004 - 15:10 #21
altså static var holdListeners:Array = new Array();

ved godt at det ikke er smukt, - det er også bare lige til hurtig test.
Avatar billede barklund Nybegynder
18. oktober 2004 - 15:18 #22
Du kan godt initialisere din statiske variabel helt oppe ved dens definition. Det er fint nok. Men du kan lige så godt initialisere den nede i den funktion, som du jo alligevel skal gøre hver gang for at få den "tømt" for det gamle indhold.

Når du i funktionen activate() skriver:

var holdListeners = new Array();

Så laver du en lokal variabel, der hedder holdListeners og sætte den til et nyt array. Men det vil du jo ikke, så hvorfor gøre det. Du vil gerne sætte den statiske variabel holdListeners - og ikke en lokal. Så slet "var" og det virker. "var" laver lokale variabel. Så simpelt er det :)
Avatar billede kalleballe Nybegynder
18. oktober 2004 - 15:20 #23
I know, - det var en smutter ;)
Avatar billede kalleballe Nybegynder
01. november 2004 - 11:14 #24
Du kan få lidt points hvis du smider et svar :)
Avatar billede kalleballe Nybegynder
01. november 2004 - 11:15 #25
ups, - det havde du jo gjort :)
Avatar billede barklund Nybegynder
01. november 2004 - 11:29 #26
Wee tak 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