Я сделал скрипт галереи, который загружает из xml большое изображение, текст и 3 миниатюры.
У меня возникают проблемы с загрузкой миниатюр по какой-то причине.
У меня так, что три миниатюры должны быть предыдущее изображение, текущее изображение и следующее изображение. За исключением случаев, когда вы нажимаете на текущее изображение, оно должно загружать случайное изображение. Кнопки работают для этого, но если я пытаюсь загрузить миниатюры. Они не появляются.
Чтобы загрузить миниатюры, я создал цикл for для массива миниатюр, и номер изображения записывается переменной noOfImage.
Затем я загружаю другие миниатюры, вычитая 1 в noOfImage, если нажата кнопка prev (колесико мыши вниз или клавиша dwn или key влево), и добавляю 1 в noOfImage, если нажата следующая кнопка (колесо и клавиши ...)
Когда я прослеживаю, какие переменные для номера миниатюры, они кажутся правильными время от времени, а иногда я получаю ошибки.
Например
Если я загрузить SWF и нажмите кнопку Далее. Предыдущее изображение - «4294967295», а следующее - «1», но выводится это «Ошибка № 2044: необработанный IOErrorEvent :. text = Ошибка № 2035: URL-адрес не найден».
Если значение nextImage = 1, тогда я не понимаю, почему он не загружается. И почему он дает странное число для того, что должно быть 0? Я не могу сказать, связана ли проблема с операторами if, которые я использую для обработки переменных noOfImage, или это имеет какое-то отношение к загрузчикам или контейнерам миниатюр ... Я продолжаю пробовать все, что могу придумать. моя оригинальная версия загружала все большие пальцы с циклом for и работала, но у меня были проблемы с превращением их в нажимаемые кнопки, и я решил упростить их.
вот пример того, как далеко я продвинулся со сценарием.
http://soulseekrecords.org/psysci/portfolio/Portfolio.swf
ниже весь мой код, извините, если он грязный или неясный. Я стараюсь изо всех сил.
//import tweening files
import com.greensock.*;
import com.greensock.easing.*;
import flash.display.MovieClip;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;
import fl.controls.UIScrollBar;
import flash.display.Sprite;
import com.greensock.plugins.*;
TweenPlugin.activate([TintPlugin]);
//create sprite background
var backgrnd:Sprite = new Sprite();
//create array of image names
var imageNames:Array = new Array();
//create array of text descriptions
var descText:Array = new Array();
//create array for dice images
var dinames:Array = new Array();
//variable for total number of images
var totalImages:uint = imageNames.length;
//add sprite variables
var thumb:Sprite = new Sprite();
var thumb2:Sprite = new Sprite();
var thumb3:Sprite = new Sprite();
// create loaders
var smImageLoader:Loader = new Loader();
var smImageLoader2:Loader = new Loader();
var smImageLoader3:Loader = new Loader();
//create a variable to load the large image
var bigImageLoader:Loader = new Loader();
//create variables for the image #
var noOfImage:int;
var prevImage:uint;
var nextImage:uint;
//create random number var
var randomNumber:uint;
prevImage = 0;
nextImage = totalImages;
noOfImage = -1;
// add sprite to display list
addChild(thumb);
addChild(thumb2);
addChild(thumb3);
thumb.graphics.beginFill(0xFFFFFF);
thumb.graphics.drawRect(25, 325, 75, 75);
thumb.graphics.endFill();
thumb2.graphics.beginFill(0xFFFFFF);
thumb2.graphics.drawRect(125, 325, 75, 75);
thumb2.graphics.endFill();
thumb3.graphics.beginFill(0xFFFFFF);
thumb3.graphics.drawRect(225, 325, 75, 75);
thumb3.graphics.endFill();
thumb.alpha = 1;
thumb2.alpha = 1;
thumb3.alpha = 1;
thumb.addChild(smImageLoader2);
thumb2.addChild(smImageLoader3);
thumb3.addChild(smImageLoader);
smImageLoader.y = 325;
smImageLoader2.y = 325;
smImageLoader3.y = 325;
smImageLoader.x = 25;
smImageLoader2.x = 125;
smImageLoader3.x = 225;
//Scroll Variables
var scrollBarAdd:Boolean = false;
var scrollBar:UIScrollBar = new UIScrollBar();
var myXML:XML;
var myLoader:URLLoader = new URLLoader();
myLoader.load(new URLRequest("portfolio.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event)
{
myXML = new XML (e.target.data);
for(var i:uint = 0; i < myXML.img.length() ; i++)
{
imageNames.push(myXML.img[i].text());
descText.push(myXML.txt[i].text());
dinames.push(myXML.imgd[i].text());
}
totalImages = imageNames.length;
}
//add background color sprite
addChild(backgrnd);
setChildIndex(backgrnd,0);
//add background properties
backgrnd.graphics.beginFill(0xFFFFFF);
backgrnd.graphics.drawRect(0, 0, 900, 500);
//add background image
var backrobe:Loader = new Loader();
addChild(backrobe);
backrobe.x = 0;
backrobe.y = 0;
backrobe.load(new URLRequest("images/background.png"));
//add bigImageLoader to the display list
addChild(bigImageLoader);
bigImageLoader.x = 225;
bigImageLoader.y = 25;
//add buttons fwd and rev
var forward:fwd = new fwd();
var reverse:rev = new rev();
addChild(forward);
addChild(reverse);
forward.x = 155;
forward.y = 365;
reverse.x = 33;
reverse.y = 365;
forward.addEventListener(MouseEvent.MOUSE_OVER, mseovr);
reverse.addEventListener(MouseEvent.MOUSE_OVER, mseovr2);
forward.addEventListener(MouseEvent.MOUSE_OUT, mseout);
reverse.addEventListener(MouseEvent.MOUSE_OUT, mseout2);
function mseovr (event:MouseEvent){
TweenLite.to(forward, .1, {alpha:.5});
}
function mseovr2 (event:MouseEvent) {
TweenLite.to(reverse, .1, {alpha:.5});
}
function mseout (event:MouseEvent){
TweenLite.to(forward, .1, {alpha:1});
}
function mseout2 (event:MouseEvent) {
TweenLite.to(reverse, .1, {alpha:1});
}
//Variable Key Press Function
var rkey:uint = 39;
var lkey:uint = 37;
var ukey:uint = 38;
var dkey:uint = 40;
//create a textField
var myText:TextField = new TextField();
//add text box to display list
addChild(myText);
myText.width = 200;
myText.height = 340;
myText.x = 5;
myText.y = 5;
myText.wordWrap = true;
myText.multiline = true;
myText.selectable = true;
var format:TextFormat = new TextFormat();
format.font = "Arial";
format.color = 0xFFFFFF;
format.size = 20;
format.underline = false;
myText.defaultTextFormat = format;
//add button
var hotSpot:hotspot = new hotspot();
//add button to display list
addChild(hotSpot);
//Set button x and y position
hotSpot.x = 92;
hotSpot.y = 367;
hotSpot.alpha = 0;
hotSpot.width = 50;
hotSpot.height = 50;
//set buttonmode
hotSpot.buttonMode = true;
//make sure all clicks register with the thumb itself (not inner contents)
hotSpot.mouseChildren = false;
//add click listener to the button
hotSpot.addEventListener(MouseEvent.MOUSE_DOWN, buttonClickHandler);
hotSpot.addEventListener(MouseEvent.MOUSE_OVER, mouseoverhotspot);
hotSpot.addEventListener(MouseEvent.MOUSE_OUT, mouseouthotspot);
function mouseoverhotspot(event:MouseEvent){
TweenLite.to(hotSpot, .1, {alpha:.5});
}
function mouseouthotspot(event:MouseEvent){
TweenLite.to(hotSpot, 1, {alpha:0});
}
function buttonClickHandler (event:MouseEvent)
{
randomNumber = Math.random()*3;
noOfImage = randomNumber;
loadersnlist();
}
stage.addEventListener(MouseEvent.MOUSE_WHEEL, upmouse);
function upmouse(event:MouseEvent)
{
if (event.delta == 3)
{
noOfImage = noOfImage + 1;
if (noOfImage == totalImages)
{
noOfImage = noOfImage - totalImages;
}
}
if (event.delta == -3)
{
if (noOfImage == -1 || noOfImage == -2)
{
noOfImage = totalImages;
}
if (noOfImage == 0)
{
noOfImage = noOfImage + totalImages;
}
noOfImage = noOfImage - 1;
}
loadersnlist();
}
forward.addEventListener(MouseEvent.CLICK, fwdclck);
function fwdclck (event:MouseEvent)
{
noOfImage = noOfImage + 1;
if (noOfImage == totalImages)
{
noOfImage = noOfImage - totalImages;
}
loadersnlist();
}
reverse.addEventListener(MouseEvent.CLICK, revclck);
function revclck(event:MouseEvent)
{
if (noOfImage == -1 || noOfImage == -2)
{
noOfImage = totalImages;
}
if (noOfImage == 0)
{
noOfImage = noOfImage + totalImages;
}
noOfImage = noOfImage - 1;
loadersnlist();
}
//Key Right Arrow Event
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyright);
function keyright(event:KeyboardEvent)
{
if (event.keyCode==rkey || event.keyCode==ukey)
{
noOfImage = noOfImage + 1;
if (noOfImage == totalImages)
{
noOfImage = noOfImage - totalImages;
}
loadersnlist();
}
}
//Key Left Arrow Event
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyleft);
function keyleft(event:KeyboardEvent){
if (event.keyCode==lkey || event.keyCode==dkey)
{
if (noOfImage == -1 || noOfImage == -2)
{
noOfImage = totalImages;
}
if (noOfImage == 0)
{
noOfImage = noOfImage + totalImages;
}
noOfImage = noOfImage - 1;
loadersnlist();
}
}
function scrollerthing ()
{
if (myText.textHeight > myText.height)
{
scrollBar.scrollTarget = myText; //assign the target of the scrollBar to your textfield
scrollBar.height = myText.height; //make the height the same as the textfield
scrollBar.move(myText.x + myText.width, myText.y); //Move the scrollbar to the righthand side
addChild(scrollBar);
scrollBar.update();
scrollBarAdd = true;
} else
{
if((myText.textHeight < myText.height) && scrollBarAdd == true)
{
scrollBarAdd = false;
removeChild(scrollBar);
}
}
}
function loadersnlist ()
{
bigImageLoader.load(new URLRequest("images/" + imageNames[noOfImage] ) );
bigImageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, tweenage);
smImageLoader.load(new URLRequest("thumbs/" + dinames[noOfImage] ) );
smImageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, tweenage2);
prevImage = noOfImage - 1;
nextImage = noOfImage + 1;
if (prevImage <= -1){
prevImage = totalImages;
}
if (nextImage >= totalImages){
nextImage = 0;
}
trace (prevImage);
trace (nextImage);
smImageLoader2.load(new URLRequest("thumbs/" + dinames[prevImage] ) );
smImageLoader2.contentLoaderInfo.addEventListener(Event.COMPLETE, tweenage2);
smImageLoader3.load(new URLRequest("thumbs/" + dinames[nextImage] ) );
smImageLoader3.contentLoaderInfo.addEventListener(Event.COMPLETE, tweenage2);
}
function tweenage(e:Event)
{
bigImageLoader.alpha = 0;
TweenLite.to( bigImageLoader, 5, {alpha:1, ease:Expo.easeOut} );
myText.alpha = 0;
TweenLite.to( myText, 5, {alpha:1} );
myText.text = String (descText[noOfImage]);
scrollerthing();
}
function tweenage2 (e:Event)
{
//create a variable to load small thumbnail url image
TweenLite.to( smImageLoader, 5, {scaleX:.6, scaleY:.6, ease:Expo.easeOut} );
TweenLite.to( smImageLoader2, 5, {scaleX:.6, scaleY:.6, ease:Expo.easeOut} );
TweenLite.to( smImageLoader3, 5, {scaleX:.6, scaleY:.6, ease:Expo.easeOut} );
}