Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.07.2011, 23:53
krog2008 вне форума Посмотреть профиль Отправить личное сообщение для krog2008 Найти все сообщения от krog2008
  № 1  
Ответить с цитированием
krog2008

Регистрация: Jul 2011
Сообщений: 25
По умолчанию Помогите с таймером!

Доброго времени суток! Посмотрел массу тем на форуме - ответа нет!
возникла проблема.
Задача:
Менять фоновую картинку каждые n секунд, бесконечно, и картинки выбирать случайно (из 10 выбранных)
что сделал:
создал два слоя: "AS3" и "Img" во второй соответственно закинул в 10 ключевых кадров по изображению! в AS3 написал код:

Код 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();
Проблема: когда запуская просмотр, то происходит что картинки меняются, и действительно рандомно, но четкий интервал не держится в (4000мс) причем после 7 - 8 кадров (т.е. первые 8 кадров идут нормально). Когда прописал trace(randf); то увидел что переменная randf в один момент принимает два, а то и три значения, которые иногда дублируют друг друга, иногда в разнобой. в чем ошибка? подскажите!
Я не профессионал (мягко говоря) но понимаю суть кода, но не понимаю в чем проблема! Заранее спасибо!!!


Последний раз редактировалось Wolsh; 19.07.2011 в 14:05.
Старый 19.07.2011, 01:26
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 2  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 612
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Не клади код в кадры. Видимо, что код лежит в первом кадре. А вот здесь:
Код AS3:
var randf:Number = Math.ceil(Math.random() * 10);
gotoAndStop(randf);
Не исключен случай, что можно перейти к первому кадру. После такого перехода функция будет выполняться два раза.

Код AS3:
var randf:Number = Math.ceil(1+Math.random() * 9);
gotoAndStop(randf);

Старый 19.07.2011, 01:45
krog2008 вне форума Посмотреть профиль Отправить личное сообщение для krog2008 Найти все сообщения от krog2008
  № 3  
Ответить с цитированием
krog2008

Регистрация: Jul 2011
Сообщений: 25
Спасибо большое! помогло, но не совсем! слишком часто идут совпадения кадров
вывод:
4
4
7
10
10
10
2
... итак далее, а как можно прописать что бы переменная randf новая была не равна предыдущей?
и еще, (Подписываюсь под своей тупостью (( что значит не класть код в кадр? а где его тогда писать??

Старый 19.07.2011, 02:21
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
И вообще простой random() не годится для этой задачи.
Картинки часто будут повторяться –
Код AS3:
trace( Math.ceil(1 + 0.01 * 9) == Math.ceil(1 + 0.11 * 9) ); // true
for (var i:uint = 0; i < 25; i++)
{
	trace(Math.ceil(1 + Math.random() * 9 ));
}
За 25 итераций 2 повтора, и в итерации участвуют только 9 кадров, а не 10))).
__________________
Reality.getBounds(this);

Старый 19.07.2011, 04:16
krog2008 вне форума Посмотреть профиль Отправить личное сообщение для krog2008 Найти все сообщения от krog2008
  № 5  
Ответить с цитированием
krog2008

Регистрация: Jul 2011
Сообщений: 25
За 25 итераций 2 повтора
а как это может быть? 10 фотографий за более чем 10 повторов в любом случае начнут повторяться! или я не прав? *dont_know*

Старый 19.07.2011, 13:57
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Имеется ввиду "повтор" – друг за другом, как в Вашем трейсе. (какой-то глюк с обновлением, я не видел Вашего предыдущего сообщения).
Сравнивайте полученное число с номером текущей, и, если равны, сдвигайте его вверх или вниз.
Либо надо делать плавающий массив – с индексами основного массива_картинок в качестве элементов. При каждом выборе рандомного числа по этому числу берем индекс из временного_массива для получения картинки, И удаляем этот индекс из временного_массива, чтобы эта картинка больше не попалась. Соответственно рэндом умножаем не на общее число картинок, а на длину плавающего временного_массива. Когда он закончится, создаем его снова. Все-равно придется следить за совпадением последней показанной и первой в новом цикле, но почти не будет ситуаций типа 5-8-5-8, когда картинки в какой-то момент начинают чередоваться – тоже неприятно.
Такая техника дает гарантию, что будет показан весь сет картинок, прежде чем любая из них будет показана снова, и при этом их последовательность таки будет рандомной. Но для 10 картинок это все не очень эффективно, потому как на "стыках" двух циклов контроль отсутствует, и все-равно если последними в цикле были 5 и 8, в начале нового вполне могут оказаться те же 5 и 8. Но когда картинок достаточно много, эта ситуация будет возникать крайне редко на общем фоне.

Добавлено через 6 минут
И да, krog2008, для оформления своего кода надо использовать теги [code][/code]
__________________
Reality.getBounds(this);

Старый 19.07.2011, 15:46
krog2008 вне форума Посмотреть профиль Отправить личное сообщение для krog2008 Найти все сообщения от krog2008
  № 7  
Ответить с цитированием
krog2008

Регистрация: Jul 2011
Сообщений: 25
Спасибо большое! Сейчас попробую написать код, если все получится то выложу сюда и можно тему закрывать! благодарен Вам!
p.s. насчет тегов Ссори! первый раз тут, да и во флеше профан еще! поэтому столько глупых вопросов!

Добавлено через 6 часов 48 минут
не могу никак описать эти массивы (( напишите пожалуйста для глупого человека косящего под флешера всю голову сломал ради этого

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:38.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
random , timer , Рандом , Таймер
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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