2010-11-15 1 views
0

Я создал сценарий галереи, загружающий из xml большое изображение, текст и 3 миниатюры. У меня возникли проблемы с загрузкой эскизов по какой-то причине. У меня это так, что три миниатюры должны быть предыдущим изображением, текущим изображением и следующим изображением. За исключением случаев, когда вы нажимаете на текущее изображение, оно должно загружать случайное изображение. Кнопки работают для этого, но если я попытаюсь загрузить эскизы. Они не появляются.Проблема Загрузка миниатюр из XML во Flash as3.0

Для загрузки эскизов Я создал цикл for для массива миниатюр, а число изображений записывается переменной noOfImage. Затем я загружаю другие миниатюры, вычитая 1 в noOfImage, если нажата кнопка предыстории (прокрутка мыши или клавиша, или ключ слева) и добавление 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}); 
    } 
+0

4294967295 -1 в формате uint, посмотрите, как он там. – alxx

+0

благодаря изменению var prevImage и nextImage to int исправляет эту часть. Еще не загружая большие пальцы –

ответ

0

Вы почти находитесь в поиске значения миниатюр. Следующим шагом будет отслеживание фактического URL-адреса, который вы пытаетесь загрузить.

Выполнение этого будет показано, что вы на самом деле ссылаетесь. Похоже, что вы отслеживаете prevImage и устанавливаете его на количество изображений, когда оно меньше 1. Массив эскизов основан на нулевом значении, поэтому с помощью трех уменьшенных изображений большие пальцы находятся в 0, 1 и 2 и вы пытаетесь загрузить dinames [3].

Изменение функции loadersnlist на prevImage = totalImages-1; должен исправить это.

Как в стороне, я предлагаю разместить весь код создания вашего актива в функции компоновки, а затем, когда все будет добавлено на сцену, вы вызовете функции загрузчика, чтобы вытащить данные.

Смежные вопросы