Главная » Flash Обучение » Немного о журнале #4: вроде ошибка, а вроде и нет?

Наш журнал

Видео Журнал "Легко о Flash" - подписавшись на него, вы будете один раз в месяц получать его выпуск на свой почтовый ящик, там вы найдете новые видео уроки по работе в программе Adobe Flash CS4, а также интересные новости из мира flash сообщества.

Flash Журнл

Ваш e-mail:

Ваше имя на русском:

Политика антиспама

подпишитесь сейчас и получите доступ ко всем выпущенным журналам

Наш курс - аналогов нет!

Adobe Flash CS4 и Actionscript 3.0. Полный курс видео уроков.

Внимание!

Вы можете изучить все секреты flash анимации всего за 3 недели! Перейти из разряда новичка в разряд опытного пользователя даже без посещения дорогих курсов и чтиния толстенных талмудов.

110 видео уроков,

в превосходном качестве помогут пройти, Вам, терни flash анимации самым быстрым и легким путём!

+ActionScript 3.0

Подробнее!..

Вход на сайт



Регистрация / Напомнить?

 

return_links(2); ?> return_links(2); ?> return_links(1); ?> return_links(); ?>

Немного о журнале #4: вроде ошибка, а вроде и нет?

jiexa26rus   20 марта 2009   

 

Даже не знаю, как лучше, то ли описывать все вручную (но это не интересно и многие не поймут), то ли видео (но я не могу), то ли выложить pdf. Поступлю следующим образом.
Опишу здесь и выложу ссылку на описание с картинками и комментариями на файлообменник. Так что кому будет интересно - обязательно качайте и доказывайте мою
НЕПРАВОТУ, буду только рад получить в свой адрес критику, так как сам лучше пойму как все работает.


Приступим...


Просмотрев журнал №4 от Виталия (для меня он гуру, так как я сам почти ничего еще не знаю) и вроде бы стыдно упрекать и показывать на ошибки, но мне кажется таковая имеет место, хотя компилятор ее и не выдает. Если не прав – ОБЯЗАТЕЛЬНО ПОПРАВЬТЕ МЕНЯ!!! Заранее спасибо.


Поехали.


В самом начале урока 01_game_solve_problem создается массив answers. Потом к кнопкам enterProblem_btn, solveProblem_btn, defineNewProblem_btn цепляются слушатели событий (addEventListener), чтобы программа в течении времени своей работы могла улавливать действия пользователя (в этом в принципе и заключается интерактивность). В конце каждого слушателя событий (addEventListener) указываются функции, на которые ссылается программа при нажатии на кнопке пользователем. В принципе – это все вода и можно было бы обойтись без всего этого описания, просто новость нацелена на неопытных людей. Коим и сам являюсь, и позже попытаюсь исправить эти недочеты и прислушаться к критике.


Теперь переходим к самому главному. Проглядев урок заметил одну НЕТОЧНОСТЬ, как мне показалось. Заключается она в функции function solveProblem. Там есть такая строка:


solveMessage_txt.text=(answers[Math.floor(Math.random()*answers.length)]);


В принципе все супер, все правильно, все работает. Но есть один теоретический момент.

Встроенная во flash функция Math.floor() – округляет до целого, отбрасывая дробную часть (то есть округляет в меньшую сторону). Встроенная функция Math.random() – выдает случайное число от 0 до 1. И чтобы нам случайным перебором получить все комбинации, которые у нас есть в нашем массиве answers, Виталий умножает функцию Math.random() на answers.length и получаем Math.random()*answers.length. Все замечательно, все правильно.


Но давайте чуть-чуть углубимся.


Пусть answers.length имеет значение , к примеру, 20. То есть массив answers имеет20 элементов.

Если функция Math.random() в настоящий момент выдаст (случайно конечно) 0, то тогда мы получим в данном операторе: Math.random()*answers.length = 0*20=0. Если же вдруг функция Math.random() выдаст 1, а она ее обязательно выдаст в (какой-нибудь момент времени), то получаем: Math.random()*answers.length = 1*20=20.


Значит получаем, что оператор Math.floor(Math.random()*answers.length) тоже будет равняться 20. Получается, что мы будем ссылаться тогда на элемент массива answers[20].
А у нас всего 20 элементов в массиве, а так как первый элемент массива имеет индекс – 0, то последний двадцатый элемент массива answers должен быть answers[19].

 

То есть выражение:


solveMessage_txt.text=(answers[Math.floor(Math.random()*answers.length)]);


на мой взгляд должно иметь следующий вид:


solveMessage_txt.text=(answers[Math.floor(Math.random()*((answers.length)-1))]);


И тогда последний элемент будет не answers[20], а answers[19], что и должно быть.

 

P.S.


Ошибку ни компилятор, ни программа после компилирования не выдает. Возможно либо из-за того, что варианты 0 и 1 встречаются реже чем остальной промежуток от 0 до
1, либо я неправ ☺. Может быть. Объясните пожалуйста где мой прокол. Виталию огромное спасибо за уроки, мне они очень нравятся, и я не пытался его оскорбить, просто
сам пытаюсь достигнуть истины. Рад, если к моему мнению прислушаются и дадут толковый ответ, а не оскорбления, типа, чувак, не тупи и тому подобное ☺
Надеюсь изложил свою мысль понятно (правда наверное сумбурно и с кучей воды, но это моя первая статья ☺, если понравилась, буду продолжать и улучшать).


Огромное спасибо всем: администрации сайта easyflash.org, всем читателям.


Будьте здоровы, и надеюсь до скорых встреч.


С уважением ко всем, jiexa26rus.

Просмотров: 823 | Комментарии (1) |
#1   vitkuz      20 марта 2009 12:29   ICQ: --   



Регистрация: 17.07.2008
Публикаций: 79
Комментариев: 131
Дело в том что функция Math.random() никогда не выдаст круглый 0 или 1. Можете сами проверить запустите цикл и пусть генерирует.

Статья получилась хорошая, большое спасибо.

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.