![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2003
Адрес: Germany
Сообщений: 99
|
Делаю экзаминационный тест.
Есть клип в который подгружаются картинки. Картинки грузятся в сгенерированные мувики перемешиваются в случайном порядке и выстраиваются на сцене, с левой стороны друг под другом по оси Y. Юзер должен перетащить каринки в область сцены справа и расположить их в определённом порядке. Пока ничего сложного для меня не было, прогонял через цикл и проверял расположение по оси Y относительно друг друга. Но вот заказчик изменил задание и теперь в папке с картинками лежит две пары картинок с разными именами, но абсолютно идентичных. Он просит не изменять их внешне, а при проверке сделать так, чтобы перемена их местоположения не учитывалась. Дело осложняется ещё и тем, что количество картинок мне заранее не известно. Оно прописывается заказчиком в конфигурационном файле ( текстовой файл). Вопрос - можно ли осуществить такую проверку используя цикл? Если да, то подскажите как. Чтобы было понятнее прикладываю изображение. Заранее благодарю.
__________________
Я вставлю себе золотые зубы и женюсь, ей - богу женюсь, честное, благородное слово. Последний раз редактировалось winnner; 20.06.2010 в 02:48. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
Прочитать конфигурационный файл - LoadVars, onData
Картинкам присвойте имена, ну или хотя бы индексы - _root["mcPic"+i].idx = i; Тем картинкам, которые одинаковые присвойте одинаковые индексы. Если я правильно понял - пользователь должен единственно верно расставить картинки - значит задайте массив правильного расположеня, в который поместите присвоенные индексы - например [1, 2, 2, 2, 3, 4, 4, 4, 4, 5]. Проверяйте местоположения размещенных картинок на соответствие их индекса массиву. Сорри если непонятно. |
|
|||||
|
Регистрация: Feb 2003
Адрес: Germany
Сообщений: 99
|
Спасибо за ответ.
Такое решение я уже обдумывал. Оно конечно же сокращает код. Но в этом случае мне придётся вручную создавать массив, тем более он будет заранее определён и заказчик не сможет его изменить. До этого, когда картинки были разные, массив создавался автоматически. Заказчик указывал в конфигурационном файле только их количество. Ну и "Проверяйте местоположения размещенных картинок на соответствие их индекса массиву." непонятно как? Извините может я туплю, но не могу пока въехать, как местоположения размещенных картинок сравнить с таким массивом.
__________________
Я вставлю себе золотые зубы и женюсь, ей - богу женюсь, честное, благородное слово. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
Пусть заказчик в конфигурационном файле задает адреса картинок, их индексы (одинаковые для условно одинаковых картинок), а так же "правильный" ответ в виде последовательности индексов. Читая "задачу" вы задаете всем мувикам _root["mc"+i"].idx = readidx; прочитанный индекс, читаете в массив правильный ответ, ну а далее я не знаю как у вас происходит процесс "решения" задачи, примерно так же как вы раньше проверяли верно ли расставлены мувики вы будете проверять их, только не их порядковые номера, а их .idx свойства на соответствие "правильному" массиву.
|
|
|||||
|
Регистрация: Feb 2003
Адрес: Germany
Сообщений: 99
|
Да это всё понятно, но в таком случае невозможно организовать нормалную проверку. Т.к. индексы меняются местами т.е. при проверке Y idx_3 > Y idx_4 а в конце наоборот Y idx_4 > Y idx_3.
Проверяю так если количество правильных ответов равно количеству картинок - решение верное. Добавлено через 4 минуты P.S. Посмотрите внимательно на картинку. Это правильный ответ.
__________________
Я вставлю себе золотые зубы и женюсь, ей - богу женюсь, честное, благородное слово. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
Сложно что-то советовать не видя кода. Приведите хотя бы полную процедуру проверки правильности ответа в том виде как она сейчас у вас работает (для условия когда все картинки разные).
|
|
|||||
|
Регистрация: Feb 2003
Адрес: Germany
Сообщений: 99
|
Пожалуйста, вот:
mc_button.onPress = function() { for (i=0; i<bz; i++) {//bz - количество картинок if(_root["platz_"+i].hitTest(_root.box_0)){platziert = 1;}else{platziert = 0;}; //box_0 - место куда должны быть перетянуты картинки "platz_"+i имя мувика с картинкой. if(platziert == 1){ if(_root["platz_"+i]._y < _root["platz_"+(i+1)]._y){ antwort+=1; }; }; }//endFor if (antwort==bz) { mitt(1); //сообшение о правильном решении } else { mitt(0); //сообшение об ошибочном решении }; }; Добавлено через 17 минут P.S. Вот трейс проверки с индексом : idx_0._y=124 platz_0._y=124 idx_1._y=148 platz_1._y=148 idx_2._y=161 platz_2._y=161 idx_3._y=172 platz_3._y=172 idx_4._y=184 platz_4._y=184 idx_5._y=189 platz_5._y=189 idx_3._y=172 platz_6._y=267 idx_2._y=161 platz_7._y=280 количество правильных решений=6
__________________
Я вставлю себе золотые зубы и женюсь, ей - богу женюсь, честное, благородное слово. Последний раз редактировалось winnner; 20.06.2010 в 14:21. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
На счет idx_0._y я не понял, вероятно вы меня не так про индексы поняли.
Предлагаю сделать следующее: Заказчик задает количество картинок и указывает какие из них одинаковые. Я не знаю как у вас это делается, предполагаю что все картинки имеют имена типа "imageX.jpg", где X от 1 до N и N задается заказчиком. В этом случае чтобы указать какие картинки считабтся одинаковыми заказчик дополнительно должен задать их индексы, которые будут одинаковыми для одинаковых картнок, например [1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7] - массив из N элементов (*). Это же и будет являться правильным решением, как я понимаю. Вы создавая мувики _root["platz_"+i] дополнительно им присваиваете очередной индекс _root["platz_"+i].idx = indexes[i] из этого массива. Далее проверяем все мувики hitTest чтобы они все находились в заданной области, проверяем чтобы _y координаты не совпадали, это цикл в цикле - for (j=0; j<i-1; j++ ![]() Можно попутно создавать массив объектов вида { y:_root["platz_"+i]._y, idx:_root["platz_"+i].idx }. Отсортировать массив по возрастанию по переменной y. Пройтись по массиву, проверить чтобы idx не уменьшался. Если все так - решение верное. Есть наверняка и более простой вариант. |
|
|||||
|
Регистрация: Feb 2003
Адрес: Germany
Сообщений: 99
|
Вы всё правильно поняли насчет номеров картинок. Индекс в конфиге я сделал.
Насчет idx_0._y, idx_0 это имя переменной из idx_ и значения i в цикле, а далее = значение по оси _y. Вот это я не понял:"проверяем чтобы _y координаты не совпадали, это цикл в цикле - for (j=0; j<i-1; j++". Это как? Если не сложно - поясните пожалуйста. Сейчас я проверяю так: mc_button.onPress = function() { loesungArr=loesung.split(","); for (i=0; i<bz; i++) { b=i+1; if(_root["platz_"+i].hitTest(_root.box_0)){platziert = 1;}else{platziert = 0;}; if(platziert == 1){ trace("idx_"+idxArr[i]+"._y="+_root["platz_"+idxArr[i]]._y+" platz_"+i+"._y="+_root["platz_"+i]._y); if(_root["platz_"+i]._y == _root["platz_"+idxArr[i]]._y){ antwort+=1; }; }; }
__________________
Я вставлю себе золотые зубы и женюсь, ей - богу женюсь, честное, благородное слово. Последний раз редактировалось winnner; 20.06.2010 в 21:00. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
Если loesung это и есть строка, содержащая "1,2,3,3,3,4,5,6,6,6,7", то код будет примерно такой:
mc_button.onPress = function() { loesungArr=loesung.split(","); goodplace = 1; var els = new Array(); for (i=0; i<bz; i++) { // формируем массив объектов с парами _y и idx els.push({ y:_root["platz_"+i]._y, idx:loesungArr[i] }); if(!(_root["platz_"+i].hitTest(_root.box_0))){ goodplace = 0; break; } if (i > 0) { // проверяем чтобы _y позиции были разные у клипов, иначе имееп неопределенность for (j=0; j<i; j++) { if (_root["platz_"+i]._y == _root["platz_"+j]._y) { goodplace = 0; break; } } } } if (goodplace == 1) { // сортируем массив по возрастанию "y" els.sort(function (a, b) { if (a.y < b.y) { return -1; } else if (a.y > b.y) { return +1; } else { return 0; } }); // если картинки расставлены верно, то idx будут в точности такие как в ответе solved = 1; for (i=0; i<bz; i++) { if (els[i].idx != loesungArr) { solved = 0; break; } } if (solved == 1) { mitt(1); //сообшение о правильном решении } else { mitt(0); //сообшение об ошибочном решении }; } else { mitt(0); //неверное расположение } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|