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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.04.2013, 19:37
AlexTrin вне форума Посмотреть профиль Отправить личное сообщение для AlexTrin Найти все сообщения от AlexTrin
  № 1  
Ответить с цитированием
AlexTrin
[+1 05.06.13]

Регистрация: Mar 2013
Сообщений: 42
По умолчанию Как перейти на след вопрос, если ответ правильный

Здравствуйте, имеется код:

Код:
<?xml version="1.0" encoding="UTF-8"?>
<myList>
    <excercise>
        <question>2 x 2?</question>
        <answer>4</answer>
    </excercise>
</myList>
Код AS3:
package 
{
 
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.xml.*;
    import flash.events.Event;
    import flash.display.Loader;
 
 
    public class Main extends MovieClip
    {
        var myFile:String;
        var xmlLoader:URLLoader;
        var myList:XML;
 
        public function Main()
        {           
            myFile =  "myList.xml";
            loadXml();
        }
        function loadXml():void
        {
            xmlLoader = new URLLoader(new URLRequest(myFile));          
            xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded);
        }
        function xmlLoaded(event:Event):void
        {
            myList = new XML(event.target.data);
            myList.ignoreWhite = true;
 
            questionTxt.text = myList.excercise[0].question;
            checkBtn.addEventListener(MouseEvent.CLICK, checkAnswer)
        }
 
           function checkAnswer (event:MouseEvent) : void {
             if (answerTxt.text == myList.excercise[0].answer) {
               trace ("correct");
             } else {
               trace ("wrong");
            }
         }
 
    }
 
}
Как перейти к следующему вопросу, если дан правильный ответ?

Добавлено через 1 час 37 минут
Пробовал так, что то не выходит:
Код AS3:
for (var i:uint = 0; i < NUM_QUESTIONS; i++) {
questionTxt.text = myList.excercise[i].question;
checkBtn.addEventListener(MouseEvent.CLICK, checkAnswer);
}
Добавлено через 1 час 52 минуты
Попробовал так:
Код AS3:
package 
{
	import flash.display.*;
    import flash.net.*;
    import flash.xml.*;
	import flash.text.*;
	import flash.events.*;
	import org.casalib.util.ArrayUtil;
 
    public class Main extends MovieClip
    {
        var myFile:String;
        var xmlLoader:URLLoader;
        var myList:XML;
		var questionTxt:TextField = new TextField();
	    var questionNumber:uint = 0;
        var correctNumber:uint = 0;		
		var correctAnswer:String;
		var randomAnswer:Array;
		const NUM_QUESTIONS:uint = 3;
 
        public function Main()
        {   
		    right = new Sprite();
            addChild(right);
 
            myFile = "myList.xml";
            loadXml();
        }
 
        function loadXml():void
        {
            xmlLoader = new URLLoader(new URLRequest(myFile));          
            xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded);
        }
 
		public function randomiseArray(answers:XMLList):Array {
 			var rArray:Array = new Array();
 			for (var i:uint = 0; i < NUM_QUESTIONS; i++) {
 			 rArray.push(answers[i]);
 			}
		    return ArrayUtil.randomize(rArray);
		}
 
	   	function nextQuest ():void {
			correctAnswer = myList.excercise[questionNumber].answer[0];
			randomAnswer = randomiseArray ( myList.excercise[questionNumber].answer.children() ); 
 
			questionTxt.type = "dynamic";
			questionTxt.width = 208; 
			questionTxt.height = 32;
			questionTxt.x = 196;
 			questionTxt.y = 101;
 			addChild(questionTxt);
			questionTxt.text = myList.excercise[questionNumber].question;
 
			for (var i:uint = 0; i < NUM_QUESTIONS; i++) {
			var answerTxt:TextField  = new TextField(randomAnswer[i]);
			answerTxt.type = "input";
			answerTxt.x = 196;
			answerTxt.y = 301;
			answerTxt.width = 208; 
			answerTxt.height = 32;
			answerTxt.background = true; 
			answerTxt.backgroundColor = 0xFFF00;   
 			answerTxt.addEventListener(KeyboardEvent.KEY_UP, checkAnswer);
			addChild(answerTxt);		
			}
		 	}		
 
        function xmlLoaded(event:Event):void
        {
            myList = new XML(event.target.data);
            myList.ignoreWhite = true;
            totalNr = myList.excercise.length(); 
			nextQuest();
			}
 
		function checkAnswer (e:KeyboardEvent):void 
		{			
 
		 while (right.numChildren) right.removeChildAt(0);
 
		 if(correctAnswer == e.target.getChildAt(e.target.numChildren - 1).text) correctNumber++;
 
			if (questionNumber == myList.excercise.length()-1) {
  				    trace ("wrong");
				    answerTxt.backgroundColor = 0xFF0000;
 			}else{
 
					trace ("correct");
				   answerTxt.backgroundColor = 0xFFF00;
				   correctNumber++;
				   nextQuest();
 				  }	 
		 	}			
 
		}
 
}
Не выходит как то.
Задача кода в том, чтобы правильный ответ вводился в answerTxt, и если он правильный то тут же следовал следующий вопрос.
Как осуществить, что то не доходит.


Последний раз редактировалось AlexTrin; 16.04.2013 в 21:29.
Старый 17.04.2013, 04:14
chamele0n вне форума Посмотреть профиль Отправить личное сообщение для chamele0n Посетить домашнюю страницу chamele0n Найти все сообщения от chamele0n
  № 2  
Ответить с цитированием
chamele0n
[+4 24.04.13]
[+4 20.04.13]

Регистрация: Feb 2013
Адрес: Seireitei
Сообщений: 176
так чтоли ?
Код AS3:
private var question_id:int = 0;
 
function xmlLoaded(event:Event):void {
 myList = new XML(event.target.data);
 myList.ignoreWhite = true; 
 questionTxt.text = myList.excercise[question_id].question;           
 checkBtn.addEventListener(MouseEvent.CLICK, nextAnswer);
}
 
function nextAnswer(event:MouseEvent) : void {
 if(question_id == myList.excercise.length()) {
    trace('end test');
    return;
 }       
 if (answerTxt.text == myList.excercise[question_id].answer) {
    question_id++;
    questionTxt.text = myList.excercise[question_id].question;
 }
}
__________________
Personal Page
$demo = $away3d + $bullet + $pathfinding;

Старый 19.04.2013, 12:49
AlexTrin вне форума Посмотреть профиль Отправить личное сообщение для AlexTrin Найти все сообщения от AlexTrin
  № 3  
Ответить с цитированием
AlexTrin
[+1 05.06.13]

Регистрация: Mar 2013
Сообщений: 42
chamele0n, огромное спасибо, все так.

Старый 17.05.2013, 15:32
AlexTrin вне форума Посмотреть профиль Отправить личное сообщение для AlexTrin Найти все сообщения от AlexTrin
  № 4  
Ответить с цитированием
AlexTrin
[+1 05.06.13]

Регистрация: Mar 2013
Сообщений: 42
Пытаюсь вывести вопросы из списка случайным образом, что то не выходит.
Код AS3:
 if(question_id == myList.excercise.length()) {
    trace('end test');
    var randomIndex:int = Math.floor( Math.random() * (question_id-1) );
    return myList.excercise[randomIndex];
 }
Народ помогите.

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

Регистрация: Feb 2013
Сообщений: 176
Код AS3:
question_id == myList.excercise.length()-1
попробуйте

Старый 17.05.2013, 16:31
AlexTrin вне форума Посмотреть профиль Отправить личное сообщение для AlexTrin Найти все сообщения от AlexTrin
  № 6  
Ответить с цитированием
AlexTrin
[+1 05.06.13]

Регистрация: Mar 2013
Сообщений: 42
Sync, непомогло

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

Регистрация: Feb 2013
Сообщений: 176
чего у вас невыходит то? трейс проходит?

Старый 17.05.2013, 17:32
AlexTrin вне форума Посмотреть профиль Отправить личное сообщение для AlexTrin Найти все сообщения от AlexTrin
  № 8  
Ответить с цитированием
AlexTrin
[+1 05.06.13]

Регистрация: Mar 2013
Сообщений: 42
Трейс то проходит, а вот вопросы как шли по порядку так и идут, никакой рандомности не появилось.

Старый 18.05.2013, 01:01
Idon'tKnow вне форума Посмотреть профиль Отправить личное сообщение для Idon'tKnow Найти все сообщения от Idon'tKnow
  № 9  
Ответить с цитированием
Idon'tKnow

Регистрация: Apr 2013
Сообщений: 77
Код AS3:
var randomIndex:int = Math.floor( Math.random() * myList.excercise.length);
Т.к округление идёт в меньшую сторону, то тут должно быть для 3х вопросов следующие промежутки:
1.) [0-1)
2.) (1-2]
3.) [2-3)

Если Вы вычитаете из длины единичку, то у Вас получаются вот такая область значений randomIndex:
[0; 1) - последний вопрос уже никогда не будет показан. Первые 2 должны появляться.

2).
Код AS3:
function nextAnswer(event:MouseEvent) : void
Код AS3:
return myList.excercise[randomIndex];
Не забыли поменять тип возвращаемых данных?

И вообще, куда он их вернет, если это приёмник? Я конечно не уверен, но по-моему приёмник не возвращает ничего, а просто реагирует на события, Вы же не можете присвоить значение какой-нибудь переменной - ссылку на этот приёмник.

P.S. В последнем абзаце не уверен.

Добавлено через 46 минут
Покопался, всё таки можно присваивать переменной возвращаемое значение переменной, но придется инициализировать вызов этого самого события. У Вас есть что-то, типа:↓ ?

Код AS3:
var secRect:Sprite;
var first:Sprite;
 
secRect = new Sprite();
secRect.graphics.beginFill(0x0000FF);
secRect.graphics.lineStyle(1);
secRect.graphics.drawRect(190, 200, 20, 20);
stage.addChild(secRect);
 
first = new Sprite();
first.graphics.lineStyle(1);
first.graphics.drawCircle(10, 20, 40);
stage.addChild(first);
 
first.addEventListener(MouseEvent.MOUSE_DOWN, firstListener);
secRect.addEventListener(MouseEvent.MOUSE_DOWN, secRectListener);
 
private function secRectListener(e:MouseEvent):void {
				trace("secRect!");
				//e.updateAfterEvent();
		}
 
private function firstListener(e:MouseEvent):void {
				trace("first");
				secRectListener(e); // вызов события.
		}
Буду рад услышать критику, если ошибаюсь в чём-либо.


Последний раз редактировалось Idon'tKnow; 18.05.2013 в 01:48.
Старый 20.05.2013, 12:52
AlexTrin вне форума Посмотреть профиль Отправить личное сообщение для AlexTrin Найти все сообщения от AlexTrin
  № 10  
Ответить с цитированием
AlexTrin
[+1 05.06.13]

Регистрация: Mar 2013
Сообщений: 42
А если вопроса не 3, а десятки или сотни, что тогда?
Не могу разобраться как добиться рандомности в таком случае.

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

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

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


 


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


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