Tomasz Mateusz Zelmański

Tomasz Mateusz Zelmański freelance art
director

Temat: [AS3] swf+xml wgrywa swf+xml; błąd dostępu

Zapewne banalne pytanie, ale przy mojej nikłej wiedzy w tym temacie nawet nie wiem zbytnio, gdzie szukać odpowiedzi.

W skrócie: montuję galerię na podstawie tutoriala (menu) + darmowego skrytu (slider foto) - obydwa swf'y (kiedy używane niezależnie) działają. Problem pojawia się jak w pierwszym pliku (strona z menu) chcę załadować kolejny (addChild). Wyskakuje błąd, że nie może znaleźć url pliku xml.

Przy testowaniu głównego pliku (+ wybranie opcji z menu) wysypuje taki błąd:

TypeError: Error #1009: Nie można uzyskać dostępu do właściwości lub metody dla odniesienia do obiektu null.
at image_roll()
TypeError: Error #1009: Nie można uzyskać dostępu do właściwości lub metody dla odniesienia do obiektu null.
at image_roll/xmlGallery()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
Error #2044: Nieobsługiwane IOErrorEvent:. text=Error #2035: Nie znaleziono adresu URL.


Przy eksporcie samego image_roll'a wszystko działa jak należy.

Coś banalnego przegapiłem?Tomasz Mateusz Zelmański edytował(a) ten post dnia 02.08.10 o godzinie 13:56

konto usunięte

Temat: [AS3] swf+xml wgrywa swf+xml; błąd dostępu

Przyczyna - plik główny i ładowany nie leżą w tym samym folderze, więc ładowany xml jest szukany w innym miejscu niż myślisz... tzn ścieżka którą budujesz jest tworzona względem głównego pliku.
Tomasz Mateusz Zelmański

Tomasz Mateusz Zelmański freelance art
director

Temat: [AS3] swf+xml wgrywa swf+xml; błąd dostępu

A można wymusić, aby pobierał go dokładnie z tego podfoldera, gdzie leży?

Bo na bazie tego skryptu ma być ok. 20 galerii i tak byłoby najłatwiej...
Tomasz Mateusz Zelmański

Tomasz Mateusz Zelmański freelance art
director

Temat: [AS3] swf+xml wgrywa swf+xml; błąd dostępu

Spróbowałem "przemeblować" projekt tak, aby wszystkie xml'e były w jednym miejscu i to jest niby ok.

Ale niestety dalej występują jakieś błędy przy ładowaniu drugiego swf'a:


TypeError: Error #1009: Nie można uzyskać dostępu do właściwości lub metody dla odniesienia do obiektu null.
at image_roll()
TypeError: Error #1009: Nie można uzyskać dostępu do właściwości lub metody dla odniesienia do obiektu null.
at image_roll/xmlGallery()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()


Jakby ktoś mógł zerknąć będę zobowiązany. Tutaj źródła -> http://www.zelmanski.home.pl/gl/tz_portfolio.zip

-----

Po długich poszukiwaniach wiem już, gdzie jest problem

image_roll.as - odwołuje się do stage i dlatego (?) przy wczytywaniu wyskakują błędy.
Nie wiem natomiast jak to zbytnio zmienić - jakieś rady?


package
{
import gs.*;

import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.display.DisplayObject;
import flash.display.Stage;
/**
* @author: TUFF-STUDIO.COM /Chris
*/
public class image_roll extends MovieClip
{
var lo : Loader;
var xmlLoader : URLLoader;
var xml : XML;
var xmlList : XMLList;
var startX : Number = 0;
var startY : Number;
var mc : MovieClip;
var container : MovieClip;
var _odstep : Number = 0;
public function image_roll ()
{
xmlLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, xmlGallery);
xmlLoader.load(new URLRequest("./xml/chopin_coke.xml"));
container = new MovieClip();
container.x = stage.stageWidth / 2;
container.y = stage.stageHeight / 2 - 200;
container.cacheAsBitmap = true;
addChild(container);

}

function xmlGallery (event : Event) : void
{
xml = new XML(xmlLoader.data);
xmlList = xml.children();
var i : int = 0;
for (i;i < xmlList.length();i++)
{
var _width : Number = xmlList[i].@width;
var _height : Number = xmlList[i].@height;
mc = new MovieClip();
lo = new Loader();
lo.load(new URLRequest(xmlList[i].@name));
addChild(mc);
mc.addChild(lo);
container.addChild(mc);
mc.x = startX;
startX = mc.x + _width + _odstep;
startY = (stage.stageHeight / 2 - _height) / 2;
mc.y = startY;
mc.addEventListener(MouseEvent.CLICK, onPicClick);
mc.buttonMode = true;

}
}

function onPicClick (event : MouseEvent) : void
{
var deltaX : Number = event.currentTarget.x + (container.x - stage.stageWidth / 2) + (event.currentTarget.width / 2);
TweenLite.to(container, 1, {x:container.x - deltaX});
TweenLite.to(event.currentTarget, 1, {alpha:1});
}
}
}
Tomasz Mateusz Zelmański edytował(a) ten post dnia 02.08.10 o godzinie 20:01
Andrzej Styś

Andrzej Styś Lorem ipsum ex modus
laboramus nam, duo
eu denique reform...

Temat: [AS3] swf+xml wgrywa swf+xml; błąd dostępu

Tomasz Mateusz Zelmański:
jakieś rady?

korzystaj ze stage'a, dopiero gdy doladowany
swf wie czym jest stage.
np. zrob tak:

public function image_roll(){
init();
}

private function init():void{
addEventListener(Event.ADDED_TO_STAGE, handleAddedToStage);

}




private function handleAddedToStage(event:Event):void{
// tu mozesz odwolac sie do stage'a
}
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: [AS3] swf+xml wgrywa swf+xml; błąd dostępu

Andrzej Styś:
Tomasz Mateusz Zelmański:
jakieś rady?

korzystaj ze stage'a, dopiero gdy doladowany
swf wie czym jest stage.
np. zrob tak:

public function image_roll(){
init();
}

private function init():void{
addEventListener(Event.ADDED_TO_STAGE, handleAddedToStage);

}
private function handleAddedToStage(event:Event):void{
// tu mozesz odwolac sie do stage'a
}


public function CONSTRUKTOR_KLASY(){
if(stage){
init();
}else{
addEventListener(Event.ADDED_TO_STAGE, init);
}
}

init(e:Event= null)
{
removeEventListener(Event.ADDED_TO_STAGE, init);
/*to moge odwołać się do obiektu stage bo mam pewność że moj obiekt rozszerzający displayObject jest dodany do sceny a wiec ma do niej dostęp.*/
}
Jerzy Wierzchowski edytował(a) ten post dnia 04.08.10 o godzinie 09:57

konto usunięte

Temat: [AS3] swf+xml wgrywa swf+xml; błąd dostępu

Witam :)

mam podobny problem. Chciałabym zrobić sobie stronkę ze swoimi pracami fotograficznymi. Galerie zrobiłam wg. pewnej książki do nauki Flash CS4. Działa świetnie jak jest w osobnym swf. Jednak jak ją ładuję do indexu zgłasza mi problem #1009 " Nie można uzyskać dostępu do właściwości lub metody dla odniesienia do obiektu null "

Kod do galerii zaczyna się tak:


package
{
import flash.display.*;
import flash.events.*;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.text.*;
import flash.filters.ColorMatrixFilter;
import fl.motion.AdjustColor;
import flash.errors.IOError;
import flash.utils.*;
import flash.ui.*;

public class fashion extends MovieClip
{
private var fashionNazwa:String = "fashion.xml";
private var listaObrazow:XMLList;
private var liczbaObrazow:Number;
private var xmlLoader:URLLoader = new URLLoader();
private var kolumnyFashion:uint = 3;
private var wierszeFashion:uint = 5;
private var krokFashion:Number = kolumnyFashion * wierszeFashion;
private var marginesLewo:Number = 10;
private var marginesGora:Number = 20;
private var odstepMiniatury_x:Number = 10;
private var odstepMiniatury_y:Number = 10;
private var stronaFashion:Number = 1;
private var zdjecieRamka:Number = 4;
private var loaderRamka:Number = 3;
private var wypelnijZdjecie:Boolean = false;
private var wygladzZdjecie:Boolean = true;
private var wypelnijMini:Boolean = true;
private var wygladzMini:Boolean = true;
private var numerZdjecie:int = -1;
private var wsteczY:Number = 590.60;
private var dalejY:Number = 590.60;


public function fashion():void
{
stage.scaleMode = StageScaleMode.NO_SCALE;

zaladujXML();

panelZdjecie.gotoAndStop(1);
}

private function zaladujXML():void
{
xmlLoader.load(new URLRequest(fashionNazwa));
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, bladXML);
xmlLoader.addEventListener(Event.COMPLETE, przetworzXML);

function bladXML(e:IOErrorEvent):void
{
fashionTytul.text = "UWAGA Nie można załadować galerii";
e.target.removeEventListener(IOErrorEvent.IO_ERROR, bladXML);
e.target.close();
}
}
private function przetworzXML(e:Event):void
{
var xmlPlik:XML = new XML(e.target.data);

fashionTytul.text = xmlPlik. @ NAZWA;
listaObrazow = xmlPlik.IMAGE;
liczbaObrazow = listaObrazow.length();

inicjujPanelMiniatury(stronaFashion);

xmlLoader.removeEventListener(Event.COMPLETE, przetworzXML);
xmlLoader = null;
}


Próbowałam ten kod, który polecił Jerzy. Index wczytuje już galerię, ale galeria sama już nie działa i wtedy zgłasza błąd składniowy
#1084 że oczekuje rightparent before colon

Kod wkleiłam tak:


package
{
import flash.display.*;
import flash.events.*;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.text.*;
import flash.filters.ColorMatrixFilter;
import fl.motion.AdjustColor;
import flash.errors.IOError;
import flash.utils.*;
import flash.ui.*;
public class fashion extends MovieClip
{
private var fashionNazwa:String = "fashion.xml";
private var listaObrazow:XMLList;
private var liczbaObrazow:Number;
private var xmlLoader:URLLoader = new URLLoader();
private var kolumnyFashion:uint = 3;
private var wierszeFashion:uint = 5;
private var krokFashion:Number = kolumnyFashion * wierszeFashion;
private var marginesLewo:Number = 10;
private var marginesGora:Number = 20;
private var odstepMiniatury_x:Number = 10;
private var odstepMiniatury_y:Number = 10;
private var stronaFashion:Number = 1;
private var zdjecieRamka:Number = 4;
private var loaderRamka:Number = 3;
private var wypelnijZdjecie:Boolean = false;
private var wygladzZdjecie:Boolean = true;
private var wypelnijMini:Boolean = true;
private var wygladzMini:Boolean = true;
private var numerZdjecie:int = -1;
private var wsteczY:Number = 590.60;
private var dalejY:Number = 590.60;
public function CONSTRUKTOR_KLASY(){
if(stage){
init();
}else{
addEventListener(Event.ADDED_TO_STAGE, init);
}
}

init(e:Event= null)
{
removeEventListener(Event.ADDED_TO_STAGE, init);

}

public function fashion():void
{
stage.scaleMode = StageScaleMode.NO_SCALE;
zaladujXML();

panelZdjecie.gotoAndStop(1);
}



Czy ktoś umiałby mi pomóc aby index wywoływał poprawnie galerię?

Pozdrawiam

konto usunięte

Temat: [AS3] swf+xml wgrywa swf+xml; błąd dostępu

W takim razie najpierw popraw skladnie, a potem sie zastanow gdzie masz wywolanie "CONSTRUKTOR_KLASY".
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: [AS3] swf+xml wgrywa swf+xml; błąd dostępu

Łola Boga;) Skrzywdzony kod:P
#Po pierwsze - nazwy klasy pisze się z dużej (taka konwencja) czyli nie fashion tylko Fashion
#Po drugie - nie wiesz co to jest konstruktor... Zamiast CONSTRUKTOR_KLASY wpisz Fashion (tak samo jak nazwa klasy) - co to jest init? Brakuje słowa kluczowego "function"
#Po trzecie -to co masz teraz w funkcji "fasion"(konstrukotrze) przyklej na init.

Teraz po tym jak preloader doda swfa do sceny wywoła się init.

Próbowałam ten kod, który polecił Jerzy. Index wczytuje już galerię, ale galeria sama już nie działa i wtedy zgłasza błąd składniowy
#1084 że oczekuje rightparent before colon

Czy ktoś umiałby mi pomóc aby index wywoływał poprawnie galerię?

PozdrawiamJerzy W. edytował(a) ten post dnia 15.02.11 o godzinie 19:55



Wyślij zaproszenie do