![]() |
|
|
|||||
Регистрация: Jul 2011
Сообщений: 25
|
![]() Доброго времени суток! Посмотрел массу тем на форуме - ответа нет!
возникла проблема. Задача: Менять фоновую картинку каждые n секунд, бесконечно, и картинки выбирать случайно (из 10 выбранных) что сделал: создал два слоя: "AS3" и "Img" во второй соответственно закинул в 10 ключевых кадров по изображению! в AS3 написал код: import flash.utils.Timer; import flash.events.TimerEvent; var time:Timer = new Timer(4000,0); time.start(); time.addEventListener(TimerEvent.TIMER, wallch); function wallch(event:TimerEvent):void { var randf:Number = Math.ceil(Math.random() * 10); gotoAndStop(randf); } stop(); Я не профессионал (мягко говоря) но понимаю суть кода, но не понимаю в чем проблема! Заранее спасибо!!! Последний раз редактировалось Wolsh; 19.07.2011 в 14:05. |
|
|||||
Не клади код в кадры. Видимо, что код лежит в первом кадре. А вот здесь:
Не исключен случай, что можно перейти к первому кадру. После такого перехода функция будет выполняться два раза.
__________________
if (love is true) break my.heart; |
|
|||||
Регистрация: Jul 2011
Сообщений: 25
|
Спасибо большое! помогло, но не совсем! слишком часто идут совпадения кадров
вывод: 4 4 7 10 10 10 2 ... итак далее, а как можно прописать что бы переменная randf новая была не равна предыдущей? и еще, (Подписываюсь под своей тупостью (( что значит не класть код в кадр? а где его тогда писать?? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
И вообще простой random() не годится для этой задачи.
Картинки часто будут повторяться – За 25 итераций 2 повтора, и в итерации участвуют только 9 кадров, а не 10))).
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Jul 2011
Сообщений: 25
|
За 25 итераций 2 повтора
а как это может быть? 10 фотографий за более чем 10 повторов в любом случае начнут повторяться! или я не прав? *dont_know* |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Имеется ввиду "повтор" – друг за другом, как в Вашем трейсе. (какой-то глюк с обновлением, я не видел Вашего предыдущего сообщения).
Сравнивайте полученное число с номером текущей, и, если равны, сдвигайте его вверх или вниз. Либо надо делать плавающий массив – с индексами основного массива_картинок в качестве элементов. При каждом выборе рандомного числа по этому числу берем индекс из временного_массива для получения картинки, И удаляем этот индекс из временного_массива, чтобы эта картинка больше не попалась. Соответственно рэндом умножаем не на общее число картинок, а на длину плавающего временного_массива. Когда он закончится, создаем его снова. Все-равно придется следить за совпадением последней показанной и первой в новом цикле, но почти не будет ситуаций типа 5-8-5-8, когда картинки в какой-то момент начинают чередоваться – тоже неприятно. Такая техника дает гарантию, что будет показан весь сет картинок, прежде чем любая из них будет показана снова, и при этом их последовательность таки будет рандомной. Но для 10 картинок это все не очень эффективно, потому как на "стыках" двух циклов контроль отсутствует, и все-равно если последними в цикле были 5 и 8, в начале нового вполне могут оказаться те же 5 и 8. Но когда картинок достаточно много, эта ситуация будет возникать крайне редко на общем фоне. Добавлено через 6 минут И да, krog2008, для оформления своего кода надо использовать теги [code][/code]
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Jul 2011
Сообщений: 25
|
Спасибо большое! Сейчас попробую написать код, если все получится то выложу сюда и можно тему закрывать! благодарен Вам!
p.s. насчет тегов Ссори! первый раз тут, да и во флеше профан еще! поэтому столько глупых вопросов! Добавлено через 6 часов 48 минут ![]() ![]() ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:22. |
|
« Предыдущая тема | Следующая тема » |
Теги |
random , timer , Рандом , Таймер |
|
|