Показать сообщение отдельно
Старый 28.06.2006, 15:08
udvikler вне форума Посмотреть профиль Отправить личное сообщение для udvikler Найти все сообщения от udvikler
  № 1  
Ответить с цитированием
udvikler

Регистрация: Jun 2006
Сообщений: 2
По умолчанию XML, loop по нескольку штук за раз, арифметика и др.

Добрый день, уважаемые флэшеры!

мне нужно сделать основанный на XML баннер. XML файл будет содержать от 5 до 30 тэгов (childNodes). Предполагается, что XML будет редактироваться клиентом (то есть количество ChildNodes будет меняться).

мне нужно брать данные из XML и затем отображать их анимированными по пять штук за раз. Первые пять, вторые пять, и т.д. А если, например, тэгов будет 13, то соответственно 5, 5 и затем 3. После чего вся канитель должна начинаться сначала, то есть первые пять и т.д.

XML выглядит так:


Код:
<?xml  version = "1.0" encoding = "Windows-1251" ?>
<tariffs>
<tariff where = "Kaliningrad, Russia"  howmuch = "1,5$" />
<tariff where = "Khorezm"  howmuch = "0,2$" />
<tariff where = "Moscow"  howmuch = "2,5$" />
<tariff where = "Kiev"  howmuch = "0,4$" />
<tariff where = "Bobruysk"  howmuch = "0,3$" />
<tariff where = "Chirchik"  howmuch = "0,3$" />
<tariff where = "Tashkent, mobiles"  howmuch = "0,3$" />
<tariff where = "Magadan"  howmuch = "0,3$" />
<tariff where = "Almaty"  howmuch = "0,3$" />
</tariffs>

actionscript:

первый фрейм:

Код:
var indhold:XML = new XML();
indhold.ignoreWhite = true;
var destinations:Array = new Array();
var prices:Array = new Array();
var Format:TextFormat = new TextFormat();

Format.size = 11;
Format.color = 0xffffff;
Format.font = "tahoma";
Format.bold = true;

indhold.load("tarifi.xml");

второй фрейм:

Код:
indhold.onLoad = function(success) {
    if (success) {
        var tarifiki:Array = this.firstChild.childNodes;
        for (i=0; i<tarifiki.length; i++) {
            destinations.push(tarifiki[i].attributes.where);
            prices.push(tarifiki[i].attributes.howmuch);
        }
    } else {
        trace("error loading xml");
    }
};
кстати, несмотря на проверку загрузки, xml грузится через раз, то данные выдает, то undefined. в чем может быть проблема?

третий фрейм:

Код:
import mx.transitions.*;
import flash.filters.*;

// делаем текстовые поля:
   
for (i=0; i<5; i++) {
        _root.createTextField("gde"+i, i+3, 16, 20*i+30, 200, 30);
        var ds:DropShadowFilter = new DropShadowFilter(5, 45, 0x000000, 100, 1, 3, 0, 1, false, false, false); // фильтр добавлен лишь ради alpha tween-a, 
// который без этого отказывался работать.
        _root["gde"+i].filters = [ds];
        _root["gde"+i].text = destinations[i];
        _root["gde"+i].setTextFormat(Format);
        var nashTween = new Tween(_root["gde"+i], "_alpha", Strong.easeIn, 0, 100, 2, true);
}
   
for (i=0; i<5; i++) {
        _root.createTextField("pochem"+i, i+33, 180, 20*i+30, 200, 30);
        var ds:DropShadowFilter = new DropShadowFilter(5, 45, 0x000000, 100, 1, 3, 0, 1, false, false, false);
        _root["pochem"+i].filters = [ds];
        _root["pochem"+i].text = prices[i];
        _root["pochem"+i].setTextFormat(Format);
        var nashTween = new Tween(_root["pochem"+i], "_alpha", Strong.easeIn, 0, 100, 2, true);
}
        

var maskClip:MovieClip = _root.createEmptyMovieClip("opa", 200);
        with (maskClip) {
            
    // рисуем маску
            beginFill(0x667686, 100);
            moveTo(0, 30);
            lineTo(Stage.width, 30);
            lineTo(Stage.width, Stage.height);
            lineTo(0, Stage.height);
            lineTo(0, 30);
            endFill();
        }
        
      // анимируем маску  
        var myTransitionManager:TransitionManager = new TransitionManager(opa);
        myTransitionManager.startTransition({type:Wipe, direction:Transition.OUT, duration:3, easing:None.easeNone, startPoint:9});
        var myListener:Object = new Object();
        myListener.allTransitionsOutDone = function(eventObj:Object) {
        trace("allTransitionsOutDone event occurred."); // трейс добавлен для //отлова момента, когда следует начинать отображение следующих пяти //элементов массива в текстовых полях, тут я пытался убить первые пять //полей и создать новые, однако первые пять отказывались умирать
                                                                         
        };
        myTransitionManager.addEventListener("allTransitionsOutDone", myListener);

            
stop(); //добавлено только для того чтобы убедиться, что визуально эффект выглядит так, как должен.
а теперь проблемы/вопросы:
как показать следуюущие пять (или меньше) элементов?
как проверить сколько следующих элементов показывать?
как наилучшим образом организовать показ всего "шоу" сначала (первых пяти?


буду благодарен за любую помощь