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

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

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

Регистрация: 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
но там приходилось создавать столько переменных, сколько вопров существуют. как можно сделать так, чтобы они все в массив загружались и автоматически выходили?

я новичок еще) помогите пожалуйста, в каком направлении мне идти?
Код AS3:
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);
}

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Попробуйте почитать книгу 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.
Старый 20.10.2017, 15:55
ilmira вне форума Посмотреть профиль Отправить личное сообщение для ilmira Найти все сообщения от ilmira
  № 3  
Ответить с цитированием
ilmira

Регистрация: Jun 2012
Сообщений: 22
Цитата:
Сообщение от ZackMercury Посмотреть сообщение
Попробуйте почитать книгу ActionScript 3.0 для Flash. Подробное руководство

Старайтесь ставить точку с запятой в конце каждой строчки, иначе однажды это может вызвать некоторые проблемы.


Что бы я сделал:
Класс Exercise - упражнение, в котором будет храниться вопрос, варианты ответа и какой из них правильный и информацию о том, пройден ли тест и какой вариант выбран.
Массив объектов Exercise, данные вытаскиваем из XML.
Далее пример постраничного прохождения теста
Сделаем во флеше заготовку "формы" теста, и напишем класс, который будет отвечать за ответ на действия теста. Когда тест пройден, посылаем событие, что текущий тест пройден.
Создаём массив форм тестов и отображаем на экране, ассоциируя при этом каждую форму с одним объектом Exercise
Ловим событие окончания из главного приложения и проверяем, не все ли тесты выполнены. Если все, то делаем что нам нужно, например, анимацию, меняем ассоциацию у всех форм тестов на новые объекты Exercise из массива упражнений, загруженных из XML, и снова ждём, пока они все будут пройдены, и так, пока все тесты не будут выполнены.

P.S. Не пишите код в кадрах, если хотите научиться программировать. Начинайте читать книгу выше и пишите в классах.
ок спасибо большое! а форма - это один кадр? или нужно все таки 95 кадров?

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Ну, это как пример. Можно во флеше вообще ничего не делать, всё кодом сгенерировать.
Просто упомянул, что есть и такая практика, делать UI во флеше.

Если вы собираетесь учить AS3, то забудьте про кадры вообще. Да и про флеш забудьте, попытайтесь впитать как можно больше из вышеупомянутой книги.
__________________
There is no thing in this world that is not simple.

Старый 20.10.2017, 17:42
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 5  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Да и про флеш забудьте
Ага,новичку ui кодом рисовать.Уж лучше сразу сказать бросай это дело.

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Не, сделать это проще UI-библиотеками.
Но сначала книгу почитайте хотя-бы до главы 12.
Хотя знаешь, что? Я с этого начинал, вроде ничего сложного.
__________________
There is no thing in this world that is not simple.

Старый 20.10.2017, 19:18
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 7  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Сложно объяснить накидал для примера как можно сделать простой тест. Правда накидал в Animate, не знаю есть он у вас или нет.

Код, на всякий случай: на сцене нужно создать
TextField (qtxt)
5 RadioButton (a0,a1,a2,a3,a4)
Button (next)
RadioButton (aHidden)
Код AS3:
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);
Вложения
Тип файла: rar TestExample.rar (438.6 Кб, 59 просмотров)

Старый 21.10.2017, 09:34
ilmira вне форума Посмотреть профиль Отправить личное сообщение для ilmira Найти все сообщения от ilmira
  № 8  
Ответить с цитированием
ilmira

Регистрация: Jun 2012
Сообщений: 22
Цитата:
Сообщение от Партизан Посмотреть сообщение
Сложно объяснить накидал для примера как можно сделать простой тест. Правда накидал в Animate, не знаю есть он у вас или нет.

Код, на всякий случай: на сцене нужно создать
TextField (qtxt)
5 RadioButton (a0,a1,a2,a3,a4)
Button (next)
RadioButton (aHidden)
Код AS3:
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);
спасибо Вам огромное))))

Добавлено через 1 минуту
Цитата:
Сообщение от ZackMercury Посмотреть сообщение
Не, сделать это проще UI-библиотеками.
Но сначала книгу почитайте хотя-бы до главы 12.
Хотя знаешь, что? Я с этого начинал, вроде ничего сложного.
книгу начала читать, спасибо за совет) а то в интернете всегда выходят справочные материалы, и нет начала и конца, а тут начну с самого начала изучать

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

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

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


 


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


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