SWiSH Forum
Forum użytkowników programów SWiSH

SWiSH Max - Pętla - zmienna w pętli - odczytanie zmiennej z pętli

Szymciosek - Pią 22 Sty, 2010 15:33
Temat postu: Pętla - zmienna w pętli - odczytanie zmiennej z pętli
Próbuję zrobić ładowanie zdjęć do danego loadera, ładowanie odbywa się w pętli, dalej dodaje listener CLICK po czym wywołanie funkcji jakiejś klik();

na początku zadeklarowałem zmienną "public var redi:XMLList;"
Później w pętli nadaje tej zmiennej wartości: "redi = myXML.hit[i].@redirect;"

I tu zaczynają się schody, ponieważ odczytując zmienną w funkcji klik(); odczytuje mi tylko pierwszą linię z XML:

Kod:
<?xml version="1.0" encoding="utf-8"?>

<hits columns="4" widthmini="100" heightmini="100" space="10">

    <hit image="1.JPG" label="label" redirect="http://www.wp.pl" />
    <hit image="2.JPG" label="label2" redirect="http://www.onet.pl" />
    <hit image="3.JPG" label="label3" redirect="http://www.wrzuta.pl" />
    <hit image="3.JPG" label="label3" redirect="http://www.forumpc.pl" />
    <hit image="3.JPG" label="label3" redirect="http://www.nasza-klasa.pl" />
    <hit image="3.JPG" label="label3" redirect="http://www.youtube.com/" />
    <hit image="3.JPG" label="label3" redirect="http://www.demotywatory.pl" />
    <hit image="3.JPG" label="label3" redirect="http://www.speedyshare.com" />
    <hit image="3.JPG" label="label3" redirect="http://www.google.pl" />
    <hit image="3.JPG" label="label3" redirect="http://www.wp.pl" />

</hits>


Chcę aby po naciśnięciu na mini1 wyskakiwało - wp.pl, mini2 - onet, mini3 wrzuta... itd.


Co prawda wiem, że forum swisha, ale mam problem :( może zna ktoś rozwiązanie.

eden - Pią 22 Sty, 2010 18:10

zamiast for sprubuj foreach

costakiego:

Kod:
var redi:XMLList = root.node.node;
 
for each (var Element:XML in redi) {
trace(Element);
}

Szymciosek - Pią 22 Sty, 2010 18:32

Kod:

for(i = 0; i < total; i++) {
                var miniatury:XMLList = myXML.hit[i].@image;
                redi = myXML.hit[i].@redirect;
                var mloader = new Loader();
                mloader.load(new URLRequest(miniatury));
                addChild(mloader);
                mloader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);
                mloader.contentLoaderInfo.addEventListener(Event.INIT, thumbInit);
                mloader.name = "mini"+i;
                mloader.x = Math.floor(i / kolumny) * (odstepy + width_mini);
                mloader.y = Math.floor(i % kolumny) * (odstepy + height_mini);
               
                //targetURL = new URLRequest(redi);
                mloader.addEventListener(MouseEvent.CLICK, klik);
                mloader .addEventListener(MouseEvent.MOUSE_OVER, over);
                mloader.addEventListener(MouseEvent.MOUSE_OUT, out)
            }   


Tak wygląda moja pętla, ale jak zmieniam tam na początku for (...) na twoje for each(var Element:XML in redi) {}

to wywala błędy:
Kod:

Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2035: Nie znaleziono adresu URL.
Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2035: Nie znaleziono adresu URL.
Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2035: Nie znaleziono adresu URL.
Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2035: Nie znaleziono adresu URL.
Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2035: Nie znaleziono adresu URL.
Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2035: Nie znaleziono adresu URL.
Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2035: Nie znaleziono adresu URL.
Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2035: Nie znaleziono adresu URL.
Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2035: Nie znaleziono adresu URL.
Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2035: Nie znaleziono adresu URL.



Edit:
Po wywaleniu z pętli linijki
mloader.load(new URLRequest(miniatury));

odpala się normalnie, ale wiadomo, nic się nie pojawia...
Prosiłbym też o wyjaśnienie działania for each, skąd się bierze, jak pobiera dane itp.

eden - Sob 23 Sty, 2010 17:58

for each to taka petla dla elementow obiektowych.

Niemam aktualnie flasha wiec niemoge ci dokładnie tego napisać. Sprubuj w tym
mloader.load wskazac na zmienna z pętli cos typu:
mloader.load(new URLRequest(Element));

Szymciosek - Sob 23 Sty, 2010 18:30

mloader.load(new URLRequest(Element));

Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2124: Typ wczytanego pliku jest nieznany.

a dokładniej:

Kod:

public function callThumbs():void {
            /*for (var i:Number = 0; i < total; i++)*/
            for each (var Element:XML in redi) {
                var miniatury:XMLList = myXML.hit.@image;
                //redi = myXML.hit[i].@redirect;
                var mloader = new Loader();
                mloader.load(new URLRequest(Element));
                addChild(mloader);
                mloader.name = i;
                mloader.x = Math.floor(i / kolumny) * (odstepy + width_mini) + 10;
                mloader.y = Math.floor(i % kolumny) * (odstepy + height_mini) + 10;
               
                //trace(Element);
                targetURL = new URLRequest(redi);
                mloader.addEventListener(MouseEvent.CLICK, klik);
                mloader .addEventListener(MouseEvent.MOUSE_OVER, over);
                mloader.addEventListener(MouseEvent.MOUSE_OUT, out)
            }           
        }


[ Dodano: Nie 24 Sty, 2010 14:56 ]
Problem przekierowania rozwiązany

w funkcji klik dałem:

Kod:

public function klik(e:MouseEvent):void {
            var redi = myXML.hit[e.target.name].@redirect;
            var targetURL = new URLRequest(redi);
            navigateToURL(targetURL, "_self");
        }


Powered by phpBB modified by Przemo © 2003 phpBB Group