Форум 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=206972)

cvasy 17.03.2014 12:40

Как зациклить сценарий
 
Не получается зациклить воспроизведение панорам.
Вообще останавливается после одного раза проигрывания :o
Что делаю не так?
Код AS3:

import flash.display.Bitmap; 
import flash.display.BitmapData;
import flash.events.Event;
import flash.display.Loader;
import flash.events.TimerEvent;
import flash.utils.Timer;
 
var n_img:Array = ["img/0_1.jpg", "img/0_2.jpg", "img/0_3.jpg", "img/0_4.jpg", "img/0_5.jpg", "img/0_6.jpg", "img/0_7.jpg", "img/0_8.jpg", "img/0_9.jpg", "img/0_10.jpg", "img/0_11.jpg", "img/0_12.jpg", "img/0_13.jpg", "img/0_14.jpg", "img/0_15.jpg"];
 
var ldr:Loader = new Loader();
var myBitmap:Bitmap = new Bitmap;
 
//var minuteTimer:Timer = new Timer(50, 50);
var minuteTimer:Timer = new Timer(50, 2400);
 
 
for (var nn=0; nn<=15; ) {
 
ldr.load(new URLRequest(n_img[nn]));
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, ldr_complete);
 
function ldr_complete(event:Event):void {
        myBitmap = new Bitmap( (ldr.content as Bitmap).bitmapData );
        addChild(myBitmap);
}
minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
minuteTimer.start();
 
function onTick(event:TimerEvent):void 
{
        myBitmap.bitmapData.scroll(-1,0);
}
function onTimerComplete(event:TimerEvent):void
{
        trace("Time's Up!");
        removeChild(myBitmap);
        trace(minuteTimer.currentCount);
        minuteTimer.reset();
        minuteTimer.removeEventListener(TimerEvent.TIMER, onTick);
        minuteTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
        minuteTimer.stop();
        ldr.contentLoaderInfo.removeEventListener(Event.COMPLETE, ldr_complete);
        nn++;
}
}

Спасите.помогите.самимыбезрукие()

Isfet 17.03.2014 13:09

ну так протрейсите, на каком этапе перестает работать, грузится ли вторая панорама? Запускается ли второй раз таймер,
ну и вообще по идее так должно быть

Код AS3:

function ldr_complete(event:Event):void {
        myBitmap = new Bitmap( (ldr.content as Bitmap).bitmapData );
        addChild(myBitmap);
minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
minuteTimer.start();
}

не забывайте что нужно ждать загрузки с сервера, а потом только начинать проигрывать,
и вообще это нужно делать не циклом а рекурсией, в которую передавать путь к файлу

alexcon314 17.03.2014 13:23

Вешать в цикле тучу обработчиков комплита на лоадер, да еще хендлером указать вложенную в цикл же функцию -за это уже можно руки оборвать. Вот вам ктото их и оборвал, по-видимому. Потом, что вы хотите-то? Вы по таймеру скролите непонятно что все время -1. Что у вас должно по-новой проигрываться? Уехало все, что можно, потом удалили все. Откуда второму и последующему проигрыванию взяться?
Совсем безруким рекомендуется понатыкать трейсов побольше на разные переменные и потом неимоверным усилим ума понять, что же у вас происходит, собственно, и происходит ли вообще? Не пробовали? Попробуйте, это весело.
О, пардон, там не только хендлеры вложены в цикл, там вообще все плохо. И таймер стартует в цикле и вообще все....

cvasy 17.03.2014 16:46

Цитата:

Сообщение от Isfet (Сообщение 1161951)
ну так протрейсите, на каком этапе перестает работать, грузится ли вторая панорама? Запускается ли второй раз таймер,
ну и вообще по идее так должно быть

Код AS3:

function ldr_complete(event:Event):void {
        myBitmap = new Bitmap( (ldr.content as Bitmap).bitmapData );
        addChild(myBitmap);
minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
minuteTimer.start();
}

не забывайте что нужно ждать загрузки с сервера, а потом только начинать проигрывать,
и вообще это нужно делать не циклом а рекурсией, в которую передавать путь к файлу

вторая картинка не грузится и двигается соответсвенно

Добавлено через 1 минуту
Цитата:

Сообщение от alexcon314 (Сообщение 1161952)
Вешать в цикле тучу обработчиков комплита на лоадер, да еще хендлером указать вложенную в цикл же функцию -за это уже можно руки оборвать. Вот вам ктото их и оборвал, по-видимому. Потом, что вы хотите-то? Вы по таймеру скролите непонятно что все время -1. Что у вас должно по-новой проигрываться? Уехало все, что можно, потом удалили все. Откуда второму и последующему проигрыванию взяться?
Совсем безруким рекомендуется понатыкать трейсов побольше на разные переменные и потом неимоверным усилим ума понять, что же у вас происходит, собственно, и происходит ли вообще? Не пробовали? Попробуйте, это весело.
О, пардон, там не только хендлеры вложены в цикл, там вообще все плохо. И таймер стартует в цикле и вообще все....

Да, критика принята. Руки оторваны...
помогите исправить!

alexcon314 17.03.2014 17:33

Попробуйте для начала загрузить все изображения, добавить их в массив и убедитесь, что все загружено и отображается и позиционируется. Крутить имеет смысл только после этого. Не валите все в одну кучу-цикл. Приведите этот код загрузки, если не будет получаться, дальше посмотрим. Не нужно пока таймеров и скролов, Просто загрузка, подготовительный этап всех дальнейших действий. Начальных знаний для этого у вас должно хватить. Даже на основе вашего кода. Поиск по форуму "загрузка изображений", картинок, галереи в помощь.
Что за потребительское отношение к форуму? Работайте и будет счастье. И хватит твердить по руки и "помогите". Если же у вас их действительно нет - обратитесь в вакансии.
Впрочем, я не настаиваю. Может сидеть и ждать еще неделю.


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

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