|
|
|||||
Регистрация: Jun 2012
Сообщений: 22
|
создание тестов
здравствуйте! я создаю мобильное приложение, в котором будет раздел тестирования.
есть 4 темы тестов, в каждой по 95 вопросов. раньше я вставляла вопросы и ответы и на каждой кнопке писала код . это было на actionscript 2.0. а сейчас у меня actionscript3.0. и очень много вопросов с ответами подскажите пожалуйста, как можно сделать? с чего начать? я в голове представляю вот такое действие: - текстовый файл тестов будет выглядеть так: $$$1. Первая буква алфавита? A) a* B) h C) p D) s E) f $$$2. Вторая буква алфавита? A) a B) h C) б* D) s E) f - нужно загружать вопросы в массив, а ответов другой массив или вместе с вопросом? - на одном кадре будут отображаться textfieldы вопросов и ответы на checkbox будут или лучше кнопками? - после нажатия или выбора какого то ответа, все удаляется и появляются новые вопрос-ответы. я пробывала загружать из xml но там приходилось создавать столько переменных, сколько вопров существуют. как можно сделать так, чтобы они все в массив загружались и автоматически выходили? я новичок еще) помогите пожалуйста, в каком направлении мне идти? stop(); var xmlLoader:URLLoader = new URLLoader(new URLRequest("voprosy.xml")); var xmlData:XML; xmlLoader.addEventListener(Event.COMPLETE, getXML); var xmlLoader1:URLLoader = new URLLoader(new URLRequest("otvety.xml")); var xmlData1:XML; xmlLoader1.addEventListener(Event.COMPLETE, getXML1); var vopros1:TextField = new TextField(); vopros1.autoSize = TextFieldAutoSize.LEFT vopros1.selectable = false vopros1.x = 50 vopros1.y = 80 addChild(vopros1) var vopros2:TextField = new TextField(); vopros2.autoSize = TextFieldAutoSize.LEFT vopros2.selectable = false vopros2.x = 50 vopros2.y = 130 addChild(vopros2) var otvet1:TextField = new TextField(); otvet1.autoSize = TextFieldAutoSize.LEFT otvet1.selectable = false otvet1.x = 50 otvet1.y = 180 addChild(otvet1) function getXML(e:Event):void { trace("XML загружен"); xmlData = XML(e.target.data) trace(xmlData); trace(xmlData.children()[0]); vopros1.text = (xmlData.vopros1); vopros2.text = (xmlData.vopros2); } function getXML1(e:Event):void { trace("XML загружен"); xmlData1 = XML(e.target.data) trace(xmlData1); trace(xmlData1.children()[0]); otvet1.text = (xmlData.otvet1); } |
|
|||||
Попробуйте почитать книгу ActionScript 3.0 для Flash. Подробное руководство
Старайтесь ставить точку с запятой в конце каждой строчки, иначе однажды это может вызвать некоторые проблемы. Что бы я сделал: Класс Exercise - упражнение, в котором будет храниться вопрос, варианты ответа и какой из них правильный и информацию о том, пройден ли тест и какой вариант выбран. Массив объектов Exercise, данные вытаскиваем из XML. Далее пример постраничного прохождения теста Сделаем во флеше заготовку "формы" теста, и напишем класс, который будет отвечать за ответ на действия теста. Когда тест пройден, посылаем событие, что текущий тест пройден. Создаём массив форм тестов и отображаем на экране, ассоциируя при этом каждую форму с одним объектом Exercise Ловим событие окончания из главного приложения и проверяем, не все ли тесты выполнены. Если все, то делаем что нам нужно, например, анимацию, меняем ассоциацию у всех форм тестов на новые объекты Exercise из массива упражнений, загруженных из XML, и снова ждём, пока они все будут пройдены, и так, пока все тесты не будут выполнены. P.S. Не пишите код в кадрах, если хотите научиться программировать. Начинайте читать книгу выше и пишите в классах.
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 19.10.2017 в 22:20. |
|
|||||
Регистрация: Jun 2012
Сообщений: 22
|
Цитата:
|
|
|||||
Ну, это как пример. Можно во флеше вообще ничего не делать, всё кодом сгенерировать.
Просто упомянул, что есть и такая практика, делать UI во флеше. Если вы собираетесь учить AS3, то забудьте про кадры вообще. Да и про флеш забудьте, попытайтесь впитать как можно больше из вышеупомянутой книги.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
|
|
|||||
Не, сделать это проще UI-библиотеками.
Но сначала книгу почитайте хотя-бы до главы 12. Хотя знаешь, что? Я с этого начинал, вроде ничего сложного.
__________________
There is no thing in this world that is not simple. |
|
|||||
Сложно объяснить накидал для примера как можно сделать простой тест. Правда накидал в Animate, не знаю есть он у вас или нет.
Код, на всякий случай: на сцене нужно создать TextField (qtxt) 5 RadioButton (a0,a1,a2,a3,a4) Button (next) RadioButton (aHidden) import flash.events.MouseEvent; import flash.events.Event; import fl.controls.RadioButton; import fl.controls.RadioButtonGroup; stop(); // XML с вопросами var xml:XML = <data> <q id="0" text="why?"> <answer text="1"/> <answer text="2"/> <answer text="3" right="1"/> <answer text="4"/> <answer text="5"/> </q> <q id="1" text="what?"> <answer text="1"/> <answer text="2"/> <answer text="3" right="1"/> <answer text="4"/> <answer text="5"/> </q> </data>; var curQ:int = 0; // текущий вопрос var qLen:int = xml.q.length() //количество вопросов var selA:String; // Выбранный ответ next.enabled = false; //отключаем кнопку следующего вопроса пока не ответим на вопрос var ansGroup:RadioButtonGroup = new RadioButtonGroup('answers'); ansGroup.addEventListener(Event.CHANGE,onSelect);// событие выбора ответа aHidden.group = ansGroup; //скрытый RadioButton для сброса ответов for(var i:int=0; i<5;i++){ var a:RadioButton = this['a'+i] as RadioButton; a.group = ansGroup; // Включаем RB в группу } function onSelect(e:Event):void{ // ответ выбран selA = ansGroup.selection.label; // Получаем строку ответа next.enabled = true; // Теперь можно включить кнопку следующего вопроса } function setQ(id:int):void{ // здесь мы задаем строки текстовым полям и RB ответов из XML qtxt.text = String(xml.q.(@id==id).@text); a0.label = String(xml.q.(@id==id).answer[0].@text) a1.label = String(xml.q.(@id==id).answer[1].@text) a2.label = String(xml.q.(@id==id).answer[2].@text) a3.label = String(xml.q.(@id==id).answer[3].@text) a4.label = String(xml.q.(@id==id).answer[4].@text) } next.addEventListener(MouseEvent.CLICK,nextQ); function nextQ(e:MouseEvent):void{ trace("На вопрос:",xml.q.(@id==curQ).@text,"\nВыбран ответ:",selA) ansGroup.selection.selected=false; curQ++; // увеличиваем индекс вопроса // Если индекс больше чем вопросов, переходим к первому вопросу if(curQ==qLen){ curQ=0; } // Обновляем интерфейс следующим вопросом setQ(curQ); // Снова отключаем кнопку до ответа на вопрос next.enabled = false; // сбрасываем выбранный ответ ansGroup.selection = aHidden; } // Задаем первый вопрос setQ(0); |
|
|||||
Регистрация: Jun 2012
Сообщений: 22
|
Цитата:
Добавлено через 1 минуту книгу начала читать, спасибо за совет) а то в интернете всегда выходят справочные материалы, и нет начала и конца, а тут начну с самого начала изучать |
Часовой пояс GMT +4, время: 06:09. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|