Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ActionScript 3.0] Wybór pliku XML do galerii swf - sterowanie
Forum PHP.pl > Forum > Po stronie przeglądarki
Niedźwiedź
Witam,
ogólnie to sprawa wygląda tak, że mam gotową galerię we Flashu napisaną przy użyciu XML - gdy podam ścieżkę do pliku XML i katalogu ze zdjęciami wszystko działa pięknie. Próbowałem przerobić ten skrypt by obsługiwał dowolną ilość galerii: każda galeria ma włąsny plik xml i własny folder ze zdjęciami. Dobrym pomysłem wydawało mi się użycie FlashVars i PHP w tym miejscu. No i tu pojawiły się schody, których nie mogę przejść.

Próbowałem tak:

Wstawienie flasha:
  1. <object type="application/x-shockwave-flash" data="gallery.swf" width="660" height="660">
  2. <param name="movie" value="gallery.swf" />
  3. <param name="FlashVars" value="source=<?php echo $_REQUEST['src']; ?>" />


Kod w AS:
Kod
(...)
var zrodlo:String = LoaderInfo(this.root.loaderInfo).parameters["source"];
loader.load(new URLRequest("images/"+zrodlo+"/"+id+type+".jpg"));


Próbowałem również tak:
Wstawienie flasha:
  1. <object type="application/x-shockwave-flash" data="gallery.swf" width="660" height="660">
  2. <param name="movie" value="gallery.swf?source=<?php echo $_REQUEST['src']; ?>" />


Jednak jedeny co do dostaje to tło - nie ładują się żadne zdjęcia. NO i tu prośba do Was, bo mi skończyły się pomysły...

Pozdrawiam,
Kamil
wookieb
Google -> alcon
Zasysasz i instalujesz. Do flasha dołączasz debugowanie wartosci source do alcona i widzisz co rzeczywiscie skrypt odbiera od htmla.
seth-kk
strzelam ze fakt iz nie rzutujesz wartosci parametru na stringa moze byc powodem
komunikat bledu pomoglby bardzo
Niedźwiedź
@seth-kk: wszystko kompiluje się bez błędów.
seth-kk
a bledy w trakcie dzialania?
Niedźwiedź
Kod
Error #2044: Unhandled ioError:. text=Error #2032: Stream Error. URL: file:///C|/Users/Kamilek/Desktop/gotowe/null.xml
    at Miniaturki$iinit()
    at flash.display::Sprite/flash.display:Sprite::constructChildren()
    at flash.display::Sprite$iinit()
    at flash.display::MovieClip$iinit()
    at DocObject$iinit()



Bo wyskakuje po kompilacja jak błąd wyjścia w Adobe Flash CS3. Wydaje mi się, że bład powinien wyskoczyć, bo flash nie ma dostępu do serwera PHP, więc nie może uzyskać wartości source z HTML'a. Chyba, że źle rozumuję. Na flashu się nie znam:P
seth-kk
czy ten plik powinien nazywac sie null?
poza tym mozesz zainstalowac sobie playera z debugerem i w przegladarce ogladac komunikaty bledow
Niedźwiedź
To że błąd wyrzuca null wynika właśnie z tego że po kompilacji we flashu nie ma zmiennych we FlashVars. Wersji playera z debuggerem nie ma w paczce w repo arch linuxa (a na nim mam serwer php).

Stworzyłem sobie prosty plik flasha, zeby przetestowac co dostaję z htmla, w pliku flasha sa linie:

Kod
import flash.display.LoaderInfo;
var zrodlo:String = LoaderInfo(this.root.loaderInfo).parameters["source"];
trace(zrodlo);


Po przetworzeniu nie wyświetla się nic. Jesli do FLashVars podstawię sztywną wartość zmiennej (jakiś tekst a nie pobranie wartości przez PHP), to również nie wyświetla się nic. Co w sumie mnie dziwi bardoz, bo gdyby zmienna nie miała wartości to chyba powinienem dostać null-a.

Takie głupie pytanie mam - obsługi FlashVars nie muszę w żadnym pliku konfiguracyjnym włączać?
wookieb
a co ja pisałem o alconie? Przeciez jak dasz trace i wrzucisz do htmla taki swf to nigdy ci nic nie wyswietli.
Niedźwiedź
@wookieb: Dzięki, przegapiłem posta.

Więc tak - alcon zwraca mi poprawne wartości, czyli wszystko jest tak powinno być:/ Sprawdzałem też ścieżkę w ten sposób:

Kod
loader.load(new URLRequest("images/gallery/"+id+type+".jpg"));


I wyświetliło zdjęcia jak powinno. Więc czemu w przypadku

Kod
var zrodlo:String = LoaderInfo(this.root.loaderInfo).parameters["source"];
loader.load(new URLRequest("images/"+zrodlo+"/"+id+type+".jpg"));


nie działa?
wookieb
No wlaśnie... Tu już chodzi o pewne właściwości umieszczenia pliku flash. Nie dodałeś obsługi blędów do twojego loadera dlatego nie masz dokładnej komunikatu błędu.

Powiedz co dokladnie zwraca ci alcon i czy ścieżka jest poprawna dla flasha.
Sprawdź jeszcze czy masz
  1. <param name="allowDomain" value="all" />
jezeli nie zadziala mozesz dodac
  1. <param name="allowScriptAccess" value="always" />
Niedźwiedź
Cytat(wookieb @ 23.09.2009, 21:22:15 ) *
No wlaśnie... Tu już chodzi o pewne właściwości umieszczenia pliku flash. Nie dodałeś obsługi blędów do twojego loadera dlatego nie masz dokładnej komunikatu błędu.


Hmmm, ja flasha w zasadzie nie znam i trochę nie bardzo rozumiem o co Ci chodzi.

Cytat(wookieb @ 23.09.2009, 21:22:15 ) *
Powiedz co dokladnie zwraca ci alcon i czy ścieżka jest poprawna dla flasha.

no mi wyświetla tylko:
[I] gallery
czyli wartość zmiennej, bo to sprawdzałem.

Cytat(wookieb @ 23.09.2009, 21:22:15 ) *
Sprawdź jeszcze czy masz
  1. <param name="allowDomain" value="all" />
jezeli nie zadziala mozesz dodac
  1. <param name="allowScriptAccess" value="always" />


Dodałem te dwie linie bo ich brakowało. Dalej to samo.
wookieb
Wystaw proszę to publicznie abyśmy mogli zobaczyć co jest nie tak.
Niedźwiedź
paczka rar ~1 mb

Glaeria pochodzi z kursu eduweb. Cztery pliki *.as + 1 fla. Linie znajdują się w plikach Minaturki.as, Mianturka.as, BigFoto.as.

Dzięki za pomoc
wookieb
Problem polegał na tym, że klasa Miniaturka nie miałas dostępu do parametru (bark dostepu do uzytych wlasciwosci), dlatego trzeba bylo przekazac źródło do klasy miniturki. Zmiany:

Miniaturki.as
Kod
private var src:String;
        public function Miniaturki():void {
            var zrodlo:String = String(LoaderInfo(this.root.loaderInfo).parameters["source"]);
            this.src = zrodlo;
            
            loader = new URLLoader();
            loader.load(new URLRequest(zrodlo+".xml"));
            loader.addEventListener(Event.COMPLETE,onLoadXMLComplete);
        }
        private function onLoadXMLComplete(event:Event):void {
            xml1 = new XML(URLLoader(event.target).data);
            var i:Number;
            mini = new Array(xml1.obrazek.length());
            count = xml1.obrazek.length();
            //ustawienia konfiguracji
            MovieClip(parent).odstep = Number(xml1.attribute("speed"));                      //+
            MovieClip(parent).propShadow = Number(xml1.attribute("shadow"));                 //+
            MovieClip(parent).propFontName = xml1.attribute("fontName");                     //+
            MovieClip(parent).propFontSize = xml1.attribute("fontSize");                     //+
            MovieClip(parent).propFontColor = xml1.attribute("fontColor");                   //+
            MovieClip(parent).propNBorderColor = xml1.attribute("nborderColor");             //+
            MovieClip(parent).propABorderColor = Number(xml1.attribute("aborderColor"));     //+                  
            
            for (i=0;i<xml1.obrazek.length();i++) {
                mini[i] = new Miniaturka(xml1.obrazek[i].attribute("id"),i,MovieClip(parent).propShadow,MovieClip(parent).propBg, this.src);
                mini[i] = addChild(mini[i]);
                mini[i].x = i*(120+10);
            }
            
            MovieClip(parent).setIlosc(0);
            
            setInterval(intervalM,10);
        
            MovieClip(parent).setTitle(xml1.obrazek[0]);
        }


Miniaturka.as
Kod
public function Miniaturka(id:String,index:Number,isShadow:Number,bg:String, zrodlo:String):void
        {
            
            this.isShadow = isShadow;
            this.id = id;
            this.bg = bg;
            this.index = index;
            tryb = false;
            
            var loader:Loader = new Loader();
            loader.load(new URLRequest("images/"+zrodlo+"/"+id+"s.jpg"));
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);
            loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);
            
            this.alpha = 1;

            button = new Sprite();
            button.graphics.beginFill(0x000000,0);
            button.graphics.drawRect(0,0,120,90);
            button.graphics.endFill();
            button.buttonMode = true;
            addChild(button);

            button.addEventListener(MouseEvent.MOUSE_OVER,onOver);
            button.addEventListener(MouseEvent.MOUSE_OUT,onOut);
            button.addEventListener(MouseEvent.CLICK,onClick);
            
            ramka.gotoAndStop(1);
        }
Niedźwiedź
wookieb, thx:) Wszystko pięknie śmiga, wielkie dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.