Actionscript测验:围绕选择的选项绘制圆圈

时间:2013-01-06 16:51:23

标签: actionscript-3 flash

使用此功能,可显示多项选择题和答案。但是,当用户点击A,B,C,D,E的“答案选项”时,我想要围绕选项字母的圆圈,如http://www.cambridge.org/other_files/Flash_apps/inuse/EVUElementaryTest/EVUElementaryIndex.htm。这可能吗?

            function showQuestions(index,limit ):void{

                var mainContainer:Sprite = new Sprite();
                mainContainer.name="qContainer";
                //mainContainer.graphics.beginFill(0xffffff);
                mainContainer.graphics.drawRect(0,0,700, 500);
                mainContainer.x=(stage.stageWidth - 700) /2;
                mainContainer.y=(stage.stageHeight - 500) /2;
                addChild(mainContainer);



                for (i=index; i < (index+limit); i++) {


                    var questionTextField = new TextField();
                    mainContainer.addChild(questionTextField);

                    questionTextField.text=i + "  " +  qnodes[i].QUESTION.text();
                    questionTextField.name=i;
                    questionTextField.width=400;
                    questionTextField.x= 0;
                    questionTextField.y=i%limit * 100;

                    var numberOfAnswers= (qnodes[i].OPT.length())
                    var j:Number;


                    for (j=0; j < numberOfAnswers; j++) {

                        var answerTextField = new TextField();
                        mainContainer.addChild(answerTextField);


                        var optionLetterMc = new MovieClip();


                        optionLetterMc.name="Answer"+i;
                        optionLetterMc.x=((j%3) * 250)   ;
                        optionLetterMc.y= (i%limit * 100) + 20 + (int(j / 3) * 20) ;
                        optionLetterMc.addEventListener(MouseEvent.CLICK, OnAnswerSelected);
                        optionLetterMc.addEventListener(MouseEvent.CLICK, saveStudentAnswer);
                        mainContainer.addChild(optionLetterMc);

                        var optLetterTextField = new TextField();
                        optionLetterMc.addChild(optLetterTextField);
                        optLetterTextField.text=optionLetters[j];
                        optLetterTextField.name=i;




                        answerTextField.autoSize = TextFieldAutoSize.LEFT;
                        answerTextField.x=((j%3) * 250) + 20 ;
                        answerTextField.y=  (i%limit * 100) + 20 + (int(j / 3) * 20) ;
                        answerTextField.text=qnodes[i].OPT[j].text();

                    }
                }

                    var btn:Button = new Button();
                    btn.label = "Next";
                    btn.x=(stage.stageWidth - 300) /2;
                    btn.y=500;
                    mainContainer.addChild(btn);
                    btn.addEventListener(MouseEvent.CLICK, nextQuestions);

            }

更新:我做的更改:我创建了 optionLetterMc ,然后在里面添加了optionTextField。它们被命名为 optionLetterMc.name =“Answer”+ i;

这是你的部分(稍作改动)。

 var mSelectedAnswer:MovieClip;

 Mouse.hide();
 Pencil.mouseEnabled = false;

 stage.addEventListener(MouseEvent.MOUSE_MOVE, OnMouseMove);
 //Answer1.addEventListener(MouseEvent.CLICK, OnAnswerSelected);

 function OnMouseMove(e:MouseEvent):void
  {
 Pencil.x = stage.mouseX;
 Pencil.y = stage.mouseY;
  }


  function OnAnswerSelected(e:MouseEvent):void
  {

mSelectedAnswer = e.currentTarget as MovieClip;
DeselectAll();
stage.removeEventListener(MouseEvent.MOUSE_MOVE, OnMouseMove);
Pencil.addEventListener(Event.ENTER_FRAME, OnAnswerEnterFrame);
Pencil.gotoAndPlay("Draw_Circle");
//trace(mSelectedAnswer.name);
}

function OnAnswerEnterFrame(e:Event):void
{
if(e.target.currentFrame == e.target.totalFrames)
{

    trace(mSelectedAnswer.name);
    mSelectedAnswer.gotoAndStop("Selected");
    Pencil.removeEventListener(Event.ENTER_FRAME, OnAnswerEnterFrame);
    stage.addEventListener(MouseEvent.MOUSE_MOVE, OnMouseMove);
}
}

function DeselectAll():void
{
mSelectedAnswer.gotoAndStop("Normal");

}

1 个答案:

答案 0 :(得分:1)

最简单的方法是制作铅笔动画动画,并在铅笔MovieClip中相应地标记动画,并在第一帧停止。然后你只需将它的坐标更改为所需的坐标并执行以下操作:

Pencil_MovieClip.addEventListener(Event.ENTER_FRAME, onPencilEnterFrame);
Pencil_MovieClip.gotoAndPlay("DrawCircle");

function onPencilEnterFrame(e:Event):void 
{
    if(Pencil_MovieClip.currentFrame == Pencil_MovieClip.totalFrames) 
    {
        DeselectAllAnswers();
        ClickedAnswer_MovieClip.gotoAndStop("selected");
        Pencil_MovieClip.removeEventListener(Event.ENTER_FRAME, onPencilEnterFrame);
    }
}

你需要一个输入框架事件监听器来对铅笔动画完成做出反应。动画完成后,您将可选择的答案MovieClip移动到另一个标有“已选择”的框架,该框架具有该圆圈图形。

DeselectAllAnswers函数只会对所有可选择的答案说明转到默认框架,其中没有选择圈。

我认为ClickedAnswer_MovieClip是点击的可选答案的MovieClip

编辑:顺便说一下,我编写的所有代码都是可选择的答案MovieClip点击处理程序。

编辑2:如果我的描述不够,这是我放在一起的一个例子:LINK