![]() |
|
||||||||||
|
|
|
|||||
|
Доброго времени суток. Столкнулся с проблемой не подсильной моему мозгу %) Делаю тесты по английскому, упражнение — есть список слов и из них надо верно составить предложение. Для этого элементы-слова тягаем на определенные места. Если постали слово верно, то место красится в зеленый цвет, если неверно то в красный, если не поставили вобще то место остается серым (все проверяю хиттестом). С последним пунктом и есть проблемы.
Как корректно узнать те елементы на которых нет слов? Вот кусок кода из исходника: ///////////////////------------------------------------- Именно эта функция ключевая function check_btn() // функция срабатывает по релизу кнопы { for (var i = 0; i < this._parent.l; i++) // перебираем элементы-слова { var mov:MovieClip = this._parent["mov" + i]; // этот обьект мы тягаем (элемент-слово) var place_col:Color = new Color(this._parent["place" + i]); place_col.setRGB(0xCCCCCC); // перед каждой проверкой цвет области сбрасываем на дефолтный "серый" for (var j = 0; j < this._parent.l; j++) // для каждого элемента-слова делаем проверку на то контачит ли он с какой либо "областью" { var place:MovieClip = this._parent["place" + j]; // эти обьекты статичны и на них мы по идее должны навести обьекты "mov" if (mov.hitTest(place)) // если есть контакт { var place_color:Color = new Color(place); if (place.i == mov.i) // и притом нужное слово навели на нужную область то все ок { // красим область в зеленый цвет place_color.setRGB(0x99CC00); // my_mc turns red #CCCCCC - grey, #99CC00 - green, #FF0000 - red trace("right") mov._parent.right++ if (mov._parent.right == mov._parent.l) // все кол-во совпадений равно кол-ву элементов то вообще все верно { trace("All done") } //break; } else { // если есть наведение, но область не верная place_color.setRGB(0xFF0000); // красим область в красный цвет trace("mistake") mov._parent.right = 0; } } } } } Вот исхоник и пример: Последний раз редактировалось nOobCrafter; 16.03.2009 в 13:06. |
|
|||||
|
Ну вы все сделали. Т.е. в этой строке вы проверяете, было ли пересечение слова и места:
Соответственно после этого блока надо поставить условие else: P.S.: класс Color - устаревший. Лучше юзать ColorTransform. |
|
|||||
|
Вообще я бы сделал так:
function check_btn(){ for(var i:Number = 0; i < placesArray.length; i ++){ for(var j:Number = 0; j < wordsArray.length; j ++){ if(placesArray[i].hitTest(wordsArray[j])){ placesArray[i].isNotEmpty = true; } } } for(var i:Number = 0; i < placesArray.length; i ++){ if(!placesArray[i].isNotEmpty){ trace(placesArray[i]) } } } wordsArray - массив слов Ну и проверки надо добавить на то - правильное слово или нет |
|
|||||
|
итого имеем + 3 "лишних" цикла и конструкция не шибко отличается от той что у меня есть(( Временно нашел выход, добавил к тому что уже написано еще 1 "лишний" цикл, где тупо все сбрасываю:
function check_btn() // функция срабатывает по релизу кнопы { for (var i = 0; i < this._parent.l; i++) { var place_col:Color = new Color(this._parent["place" + i]); place_col.setRGB(0xCCCCCC); // перед каждой проверкой цвет области сбрасываем на дефолтный "серый" } ........... Волгоградец так же вариант плох тем что если я: поместил слово на область, нажал кнопу проверки - все ок, убрал слово с области и нажал на проверку - тот же результат, обнуления нигде не происходит. |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:09. |
|
|
« Предыдущая тема | Следующая тема » |
|
|