Marta H.

Marta H. Fotograf/Grafik
komputerowy/Webmaste
r

Temat: AS3 - Galeria odtwarza się od początku, a nie od...

Witam!
Czy ktoś mógłby mi poradzić, jak powinnam poprawić kod poniższy aby działał poprawianie, czyli tak aby po kliknięciu na przycisk next bądź previous pokazywało mi się kolejne zdjęcie, a nie odtwarzała mi się galeria od początku. Niestety nie bardzo się orientuje jak to zrobić, a siedzę na tym już jakiś czas. Będę wdzięczna za pomoc.


stop();

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import fl.containers.UILoader;

import fl.containers.UILoader;
import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.plugins.*;

TweenPlugin.activate([TintPlugin]);

var numerFoto:uint;

//---------loading the external xml file-------
var urlRequest:URLRequest = new URLRequest("Photo.xml");
var urlLoader:URLLoader = new URLLoader();
var myXML:XML = new XML();
var xmlList:XMLList;
myXML.ignoreWhitespace = true;
urlLoader.addEventListener(Event.COMPLETE,fileLoaded);
urlLoader.load(urlRequest);
//--------holds the paths to the thumbnails-------;
var arrayURL:Array = new Array();
//--------holds the paths to the big photos-------
var arrayName:Array = new Array();
//--------holds the thumbnail objects-------
var holderArray:Array = new Array();
//--------represents the number of collumns-------
var nrColumns:uint = 7;
//-------represents the container of our gallery
var sprite:Sprite = new Sprite();
addChild(sprite);
var thumb:Thumbnail;
//-------- the thumbnails container-------
var thumbsHolder:Sprite = new Sprite();
sprite.addChild(thumbsHolder);
//-------- the photoLoader container-------;
var loaderHolder:Sprite = new Sprite();
loaderHolder.graphics.beginFill(0x000000);
loaderHolder.graphics.endFill();
loaderHolder.x = 15.5;
loaderHolder.y = -800;
sprite.addChild(loaderHolder);
//-------- loads the big photo-------;
var photoLoader:UILoader = new UILoader();
photoLoader.width = 881;
photoLoader.height = 525;
photoLoader.x = 15.5;
photoLoader.y = 0;
photoLoader.buttonMode = true;
loaderHolder.addChild(photoLoader);

var xphoto:photo = new photo();
xphoto.x = 880;
xphoto.y = 10;
xphoto.addEventListener(MouseEvent.CLICK,onClickClose);
photoLoader.addChild(xphoto);

var xnext:next = new next();
xnext.x = 891;
xnext.y = 227.50;
xnext.addEventListener(MouseEvent.CLICK,onClickNext);
photoLoader.addChild(xnext);

var xprevious:previous = new previous();
xprevious.x = -30;
xprevious.y = 227.50;
xprevious.addEventListener(MouseEvent.CLICK,onClickPrevious);
photoLoader.addChild(xprevious);

/* we loop through the xml file
populate the arrayURL, arrayName and position the thumbnalis */
function fileLoaded(event:Event):void
{
myXML = XML(event.target.data);
xmlList = myXML.children();
for (var i:int=0; i<xmlList.length(); i++)
{
var picURL:String = xmlList[i].url;
var picName:String = xmlList[i].big_url;
arrayURL.push(picURL);
arrayName.push(picName);

holderArray[i] = new Thumbnail(arrayURL[i],i,arrayName[i]);
holderArray[i].addEventListener(MouseEvent.CLICK,onClick);
holderArray[i].name = arrayName[i];
holderArray[i].buttonMode = true;
if (i<nrColumns)
{
holderArray[i].y = 98;
holderArray[i].x = i * 126 + 90;
}
else
{
holderArray[i].y = holderArray[i - nrColumns].y + 165;
holderArray[i].x = holderArray[i - nrColumns].x;
}
thumbsHolder.addChild(holderArray[ i ]);
}
}
//----handles the Click event added to the thumbnails--
function onClick(event:MouseEvent):void
{
photoLoader.source = event.currentTarget.name;
TweenLite.to(thumbsHolder, 0, {y:0, ease:Bounce.easeOut});
TweenLite.to(loaderHolder, 0, {y:0, ease:Elastic.easeOut});
TweenLite.to(thumbsHolder, 0, {alpha:0, ease:Elastic.easeOut});
TweenLite.to(loaderHolder, 0, {alpha:1, ease:Elastic.easeOut});
}
//----handles the Click event added to the photoLoader----
function onClickClose(event:MouseEvent):void
{
TweenLite.to(thumbsHolder, 0, {y:0, ease:Bounce.easeOut});
TweenLite.to(loaderHolder, 0, {y:-1000, ease:Elastic.easeOut});
TweenLite.to(thumbsHolder, 0, {alpha:1, ease:Elastic.easeOut});
TweenLite.to(loaderHolder, 0, {alpha:0, ease:Elastic.easeOut});
}

function onClickNext(event:MouseEvent):void
{
numerFoto++;

if (numerFoto == 25)
{
numerFoto = 1;
}

photoLoader.source = "pics/" + numerFoto + ".jpg";
}
function onClickPrevious(event:MouseEvent):void
{
numerFoto--;

if (numerFoto == 1)
{
numerFoto = 25;
}

photoLoader.source = "pics/" + numerFoto + ".jpg";
}
Marta H.

Marta H. Fotograf/Grafik
komputerowy/Webmaste
r

Temat: AS3 - Galeria odtwarza się od początku, a nie od...

Nikt nie pomoże? eh...
Szymon Rybka

Szymon Rybka Flex Developer

Temat: AS3 - Galeria odtwarza się od początku, a nie od...

W metodzie: onClick musisz ustawić akutalny numer zdjęcia w zmiennej numerFoto.
Marta H.

Marta H. Fotograf/Grafik
komputerowy/Webmaste
r

Temat: AS3 - Galeria odtwarza się od początku, a nie od...

Dziękuje bardzo za pomoc. Mam jednak prośbę. Mógłbyś bardziej sprecyzować swoją odpowiedz - coś muszę robić nie tak bo niestety galeria nadal nie działa prawidłowo.
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: AS3 - Galeria odtwarza się od początku, a nie od...

Marta H.:
Dziękuje bardzo za pomoc. Mam jednak prośbę. Mógłbyś bardziej sprecyzować swoją odpowiedz - coś muszę robić nie tak bo niestety galeria nadal nie działa prawidłowo.

Wydaje mi się, że zamiast prosić by ktoś za Ciebie napisał kod powinnaś sama pochylić się nad swoim problemem. Szczególnie, że to problem algorytmiki, a nie nieznajomości czy specyfiki platformy/języka.
Jeżeli szkoda Ci czasu samej nie możesz oczekiwać, że ktoś poświeci swój.
BTW: nie pobieraj zmiennej z tablicy w każdej linii ponieważ jest to nie optymalne(przeliczania adresu). Odczytaj raz i przypisz referencję do zmiennej a potem z niej korzystaj.
Marta H.

Marta H. Fotograf/Grafik
komputerowy/Webmaste
r

Temat: AS3 - Galeria odtwarza się od początku, a nie od...

A skąd wiesz że się nad tym nie pochyliłam...?! . Jestem programistką, dlatego poprosiłam o pomoc, ponieważ poświeciłam już trochę czasu na to ( napisałam o tym w pierwszym, co widać przeoczyłeś ).. Jak ktoś będzie chciał poświecić mi swój czas to, to zrobi. A jeśli nie, to nie.
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: AS3 - Galeria odtwarza się od początku, a nie od...

W mojej ocenie zaśmiecasz forum. Nie mówię tylko o tym wpisie, ale i o wcześniejszych.

Powinnaś wiedzieć że nazwy klas pisze się z wielkiej litery (od razu wiesz czy to klasa czy zmienna) i nie odwołuje się kółko do elementu tablicy gdy nie jest to konieczne. Tu od razu widać, że nie przeanalizowałaś działania swojego kodu:/

1) Jeżeli trzymasz w zmiennej numerFoto index bieżącego elementu to dlaczego w metodzie onClick nie aktualizujesz tej zmiennej (zmieniasz zdjęcie ale zmiennej nie)? Przecież metody onClickNext i onClickPrev działają w oparciu o tą zmienną. Jeżeli podaje ona nieprawdę to i metody nie będą działać poprawnie.

2) Na stracie aplikacji numerFoto ==0 . Co się stanie jak wywołasz onClickPrev ? Zmienna uint się "przekręci" (int wskoczy na -1) i przyjmie maksymalną możliwość wartość.
3) Skoro liczysz od 1 do 25 - czy numerFoto nie powinno mieć wartości 1 na starcie?

4) Do poprawienia tego kody wystarczy prześledzić dokładnie jego działania i zmienną numerFoto np. za pomocą funkcji trace:
trace("onClickPrevious:numerFoto= "+ numerFoto );

5) Czy nie jest tak, że ten kod jest wpisany na klatce we flashu i przechodzisz do tej klatki kilka razy? Jeżeli tak to za każdym przejściem do tej klatki numerFoto się resetuje na 0;

Każdy kiedyś zaczynał, uczył się, ale niestety tak to wygląda- najtrudniej jest zacząć. Trzeba się czasem namęczyć, posiedzieć dłużej by znaleźć błąd, ale tak wygląda proces nauki programowania.
Chętnie pomagamy na forum, czasami bywa że przyczyną niepoprawnego działania jest głupi błąd, literówka i nikt się temu nie dziwi. Tutaj jednak widać, że nie zadałaś sobie trudu prześledzenia zachowania programu i po raz kolejny wrzucasz post na forum (cieszę się, że jednak używasz TweenLite i już opisujesz temat innaczej niż "problem z kodem" :) ) by ktoś zrobił to za Ciebie. Stąd też moja uwaga.

TIP
Używaj modulo - to szybka, przejrzysta metoda na ograniczenie zmiennej całkowitoliczbowej "od góry" by nie przekroczyła np. 24 - tj. zawierała się w przedziale <0,24>:
zmienna = ++zmienna%25;Ten post został edytowany przez Autora dnia 30.07.14 o godzinie 12:32
Marta H.

Marta H. Fotograf/Grafik
komputerowy/Webmaste
r

Temat: AS3 - Galeria odtwarza się od początku, a nie od...

Rozumiem i dziękuje bardzo za wskazówki oraz uwagi.. Przyjrzę się bardziej owemu kodu.Ten post został edytowany przez Autora dnia 30.07.14 o godzinie 14:52



Wyślij zaproszenie do