【问题标题】:how to random questions in flash cs3如何在flash cs3中随机提问
【发布时间】:2011-10-18 09:19:34
【问题描述】:

我使用 flash cs5 创建了一个多项选择类型的游戏。我创建的程序正在运行,但它没有显示我期望它发生的事情。


我遇到了一些错误(实际上并不是代码中的错误)。其中一些所谓的错误是:

    1234563总共30个。我不知道应该在哪里或如何插入代码。
  1. 在游戏中,玩家必须正确回答问题,如果回答正确,则进入计分板。否则它应该显示下一个问题并计算错误答案。每个错误答案将扣除5%的总分。但问题是,无论显示正确还是错误的答案,它仍然没有进入记分牌

  2. 我还没有插入游戏必不可少/需要的计时器。我仍在试图找出如何做到这一点,因为计时器会显示扣分。这里的想法是:例如,在每次游戏遭遇(或战斗)中,都会给玩家一定的时间(比如说 20 秒),玩家必须在规定时间内正确回答问题。如果玩家回答正确应进入下一帧(显示分数)否则将扣除总分的5%

我想我可以处理计时器,但我真的需要你在前 2 个方面的帮助,我的搭档在 flash 方面还是很新。我们已经花了很多时间调试代码,但无法找到问题的解决方案。提前感谢那些愿意提供帮助的人。

这里是程序中的一些代码(其实是主代码)

函数 QuizItem(问题) { this.question=问题; this.answers=新数组(); this.numOfAnswers=0; this.correctAnswer=0; this.getQuestion=function() { 返回这个问题; } this.addAnswer=function(answer, isCorrectAnswer) { this.answers[this.numOfAnswers]=answer; 如果(是正确答案) this.correctAnswer=this.numOfAnswers; this.numOfAnswers++; }

this.getAnswer=function(answerNumberToGet)
{
    return this.answers[answerNumberToGet];
}

this.getCorrectAnswerNumber=function()
{
    return this.correctAnswer;
}

this.checkAnswerNumber=function(userAnswerNumber)
{
    if (userAnswerNumber==this.getCorrectAnswerNumber())
        gotoAndPlay("Correct");
    else
        gotoAndPlay("Wrong");
}
this.getNumOfAnswers=function()
{
    return this.answers.length; 
}
 }

 function onQuizData(success)
 {
var quizNode=this.firstChild;
var quizTitleNode=quizNode.firstChild;  
title=quizTitleNode.firstChild.nodeValue;

var i=0;
// <items> follows <title>
var itemsNode=quizNode.childNodes[1];
while (itemsNode.childNodes[i])
{
    var itemNode=itemsNode.childNodes[i];
    // <item> consists of  <question> and one or more <answer>
    // <question> always comes before <answer>s (node 0 of <item>)
    var questionNode=itemNode.childNodes[0];
    quizItems[i]=new QuizItem(questionNode.firstChild.nodeValue);
    var a=1;        
    // <answer> follows <question>
    var answerNode=itemNode.childNodes[a++];
    while (answerNode)
    {
        var isCorrectAnswer=false;
        if (answerNode.attributes.correct=="y")
            isCorrectAnswer=true;
        quizItems[i].addAnswer(answerNode.firstChild.nodeValue, isCorrectAnswer);
        // goto the next <answer>
        answerNode=itemNode.childNodes[a++];
    }
    i++;
}
gotoAndPlay("Start");
 }

 var quizItems=new Array();
 var myData=new XML();
 myData.ignoreWhite=true;
 myData.onLoad=onQuizData;
 myData.load("quiz1.xml");
 stop();

【问题讨论】:

  • 如果我错了请纠正我,但你的代码看起来像 actionscript 2

标签: xml actionscript-3 flash-cs5


【解决方案1】:

这里有很多问题。我只会说明您应该如何加载测验 XML 以及从问题列表中显示随机项目的一般过程:

import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;

var quizItems:Array;
var quizData:XML;

var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, onDataComplete);
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, onDataError);
xmlLoader.load(new URLRequest("INSERT XML URL HERE"));

function onDataComplete(evt:Event):void
{
    quizData = new XML(xmlLoader.data);
    var quizList:XMLList = quizData..item;

    createItems();

    showQuestion();
}

function createItems():void
{
    quizItems = new Array();

    // Grab each <item> node from the xml and stick it in an array.
    for each(var item:XML in quizList) quizItems.push(item);    
}

function showQuestion():void
{
    // TODO: Remove any previous question/answer items.

    // Double-check that the quizItems array is not at length 0, which means it should be repopulated.
    if (quizItems.length == 0) createItems();

    // Pick a random index based on the length of the quizItems array (which will shrink over time).
    var index:uint = Math.floor(Math.random() * quizItems.length);

    // Remove the item from the array and store it in a variable (so the item cannot be randomly chosen twice).
    var quizItemData:XML = quizItems.splice(index, 1)[0];

    // Grab the <question> node. 
    var questionNode:XML = quizItemData.question[0];
    // TODO: Take some action with the <question> data, such as assigning it to a text field.
    // Ex - myQuestionField.text = questionNode.toString();

    // Grab all the <answer> nodes as an XML list.
    var answerList:XMLList = quizItemData.answer;
    for each (var answerNode:XML in answerList) {
        // TODO: Take some action with each of the <answer> nodes.
        // Ex - myAnswerButton.labelText = answerNode.toString();
        // Ex - myAnswerButton.isCorrectAnswer = (answerNode.@correct == "y");
        // TODO: Position each answer item.
    }

    // TODO: Any remaining display tasks such as intro animation, etc.
}

function onDataError(evt:IOErrorEvent):void
{
    trace("ERROR: " + evt.text);
}

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 2011-04-05
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多