Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   можно ли обойтись одним циклом? (http://www.flasher.ru/forum/showthread.php?t=155219)

inozemcev 29.04.2011 21:46

можно ли обойтись одним циклом?
 
Есть такой код:

Код AS3:

 
                var arr:Array = [];                       
 
                      InfoBarData.getInstance().initialize();
 
                for (var i:int = 0; i < 9; i ++)
                {
                    var bitmapData:BitmapData = new BitmapData (170,40);
                    var matrix:Matrix = new Matrix ();
                    matrix.translate(0, -40*i);
                    bitmapData.draw(InfoBarData.getInstance(), matrix);
                    arr.unshift (bitmapData)
                }
 
                for (i = 0; i < 9; i ++)
                {
                        (visibleItems[i] as InfoBarItem).setInfo (arr[i]);
                }

В двух словах создаю bitmapData определенного размера и разрезаю ее на 9 частей (создаю девять экземпляров bitmapData) а потом применяю их к компонентам меню. Проблема в том, что экземпляры создаются в обратном порядке из за этого приходится создавать лишний массив запихивать экземпляры в обратном порядке и потом в отдельном цикле снова обходить массив с компонентами меню для использования экземпляров.

Если абстрактно то есть две очереди [1,...,9] и [9,...,1] как за один цикл сложить значения обоих массивов, с условием, что у одного массива значения берутся в начале списка а у другого с конца ?!

p.s Забываю благодарить авторов за их компетентные комментарии, поэтому заранее благодарю за ответ.

Добавлено через 13 минут
Решил задачу, но очень топорно просто сдвигая трансформацию, хотелось бы какое - нибудь классическое решение увидеть:

Код AS3:

                for (var i:int = 0; i < 9; i ++)
                {
                    var bitmapData:BitmapData = new BitmapData (170,40);
                    var matrix:Matrix = new Matrix ();
                    matrix.translate(0,-320 + 40*i);
                    bitmapData.draw(InfoBarData.getInstance(), matrix);
                  (visibleItems[i] as InfoBarItem).setInfo (bitmapData);
                }


TanaTiX 29.04.2011 22:15

Как вариант - ввести индекс (к примеру, j), который в каждом цикле будет инкрментиться и на его значение изменять показатель основного индекса (i) в зависимости от длины массива.


Часовой пояс GMT +4, время: 21:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.