Problem converting AS2 to AS3
Hi All,
I have a multiple choice quiz FLA including an AS file, all written in AS2 and working well. I have tried my best to "convert" them into AS3 but still encounter a lot of problem. Could you please take a look at my converted AS3 and let me know what went wrong? Thanks a lot!!!!
Also, could you let me know whether the forum even allow the attachment of FLA and AS files?
//My "Converted" AS file in AS3 ------------------------------------------------------------------------
import flash.geom.ColorTransform;
//as2 code: var _mc = this;
var _mc:MovieClip = new MovieClip();
_mc = this;
var currentQuestion:Number = 0;
var depth:Number = 0;
var submitDisabled:Boolean = true;
var tries:Number = 1;
var answerRecord:Array = new Array();
var question_array:Array = new Array();
var userAnswers_array:Array = new Array();
specifcFeedback1.visible = false;
specifcFeedback2.visible = false;
function Question( correctAnswer, numDistractors, type ):void
{
this.correctAnswer = correctAnswer;
this.numDistractors = numDistractors;
this.type = type;
}
function createQuestion():void
{
tempNum2 = question_array[currentQuestion].numDistractors;
depth = 0;
userAnswers_array = [];
var tempNum:Number = question_array[currentQuestion].correctAnswer.length;
if ( tempNum > 1 )
{
inst_txt = "Select all that apply and click <b>Submit</b>."
}
else
{
inst_txt = "Select the correct answer and click <b>Submit</b>."
}
//as2 code: this.attachMovie( "submit_mc", "submit_mc", 102, {_x:882.0, _y:6.0} );
var submit_mc:MovieClip = new submit_mc();
submit_mc.x = 882.0;
submit_mc.y = 6.0;
addChild ( submit_mc );
}
function recordAnswers( userAnswers_array ):void
{
var answerRecord[currentQuestion]:Object = new Object();
answerRecord[currentQuestion].userAnswer = userAnswers_array;
createAnswerArrays();
submitAnswers();
}
function createAnswerArrays():void
{
var corrAnsTemp_array:Array = new Array( tempNum2 );
var userAnsTemp_array:Array = new Array( tempNum2 );
var corrLen:Number = question_array[currentQuestion].correctAnswer.length;
var userLen:Number = answerRecord[currentQuestion].userAnswer.length;
for( var i:int = 0; i<corrLen; i++ )
{
corrAnsTemp_array[question_array[currentQuestion].correctAnswer] = question_array[currentQuestion].correctAnswer;
}
for( var i:int = 0; i<userLen; i++ )
{
userAnsTemp_array[answerRecord[currentQuestion].userAnswer] = answerRecord[currentQuestion].userAnswer;
}
question_array[currentQuestion].correctAnswer = corrAnsTemp_array;
answerRecord[currentQuestion].userAnswer = userAnsTemp_array;
}
function submitAnswers():void
{
//Initial state is correct unselected
var correct:Boolean = true;
var corrLen:Number = questions_array[currentQuestion].correctAnswer.length;
var len:Number = tempNum2;
if ( len == 2 )
{
tries = 3;
}
for( var i:int=0; i<len; i++ )
{
if( question_array[currentQuestion].correctAnswer == answerRecord[currentQuestion].userAnswer &&
question_array[currentQuestion].correctAnswer != undefined &&
answerRecord[currentQuestion].userAnswer != undefined )
{
//correct selected
if ( tries > 1 )
{
//as2 code: _mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].distracterBkgdColor.setRGB( 0x4DDD5A );
var distracterBkgdColorTransform:ColorTransform = _mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].distracterBkgdColor.transform.colorTransform;
distracterBkgdColorTransform.color = 0x4DDD5A;
_mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].distracterBkgdColor.transform.colorTransform = distracterBkgdColorTransform;
//as2 code: _mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].selectionMarkColor.setRGB( 0x3366CC );
var selectionMarkColorTransform:ColorTransform = _mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].selectionMarkColor.transform.colorTransform;
selectionMarkColorTransform.color = 0x3366CC;
_mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].selectionMarkColor.transform.colorTransform = selectionMarkColorTransform;
}
}
else if( question_array[currentQuestion].correctAnswer != answerRecord[currentQuestion].userAnswer &&
answerRecord[currentQuestion].userAnswer == undefined &&
question_array[currentQuestion].correctAnswer != undefined )
{
//correct unselected
if ( tries > 1 )
{
//as2 code: _mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].distracterBkgdColor.setRGB( 0x4DDD5A );
var distracterBkgdColorTransform:ColorTransform = _mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].distracterBkgdColor.transform.colorTransform;
distracterBkgdColorTransform.color = 0x4DDD5A;
_mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].distracterBkgdColor.transform.colorTransform = distracterBkgdColorTransform;
//as2 code: _mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].selectionMarkColor.setRGB( 0xFFFFFF );
var selectionMarkColorTransform:ColorTransform = _mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].selectionMarkColor.transform.colorTransform;
selectionMarkColorTransform.color = 0xFFFFFF;
_mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].selectionMarkColor.transform.colorTransform = selectionMarkColorTransform;
}
correct = false;
}
else if( question_array[currentQuestion].correctAnswer != answerRecord[currentQuestion].userAnswer &&
answerRecord[currentQuestion].userAnswer != undefined &&
question_array[currentQuestion].correctAnswer == undefined )
{
//incorrect selected
if ( tries > 1 )
{
//as2 code: _mc["distracter_"+answerRecord[currentQuestion].userAnswer+"_mc"].selectionMarkColor.setRGB( 0x3366CC );
var selectionMarkColorTransform:ColorTransform = _mc["distracter_"+answerRecord[currentQuestion].userAnswer+"_mc"].selectionMarkColor.transform.colorTransform;
selectionMarkColorTransform.color = 0x3366CC;
_mc["distracter_"+answerRecord[currentQuestion].userAnswer+"_mc"].selectionMarkColor.transform.colorTransform = selectionMarkColorTransform;
}
correct = false;
}
}
if( !correct )
{
displayFeedback( "incorrect" );
}
else
{
//If the user gets the answer right first try set correct state for each distractor.
if ( tries = 1 )
{
for( var i:int = 0; i<len; i++ )
{
//as2 code: _mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].selectionMarkColor.setRGB( 0x3366CC );
var selectionMarkColorTransform:ColorTransform = _mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].selectionMarkColor.transform.colorTransform;
selectionMarkColorTransform.color = 0x3366CC;
_mc["distracter_"+question_array[currentQuestion].correctAnswer+"_mc"].selectionMarkColor.transform.colorTransform = selectionMarkColorTransform;
}
}
displayFeedback( "correct" );
}
setNavBtnState( "submitAnswer" );
}
function displayFeedback( type ):void
{
var margin:Number = 30;
var feedbackFmt:TextFormat = new TextFormat();
feedbackFmt.color = 0x000000;
feedbackFmt.size = 12;
feedbackFmt.font = "Arial";
feedbackFmt.align = "right";
//Standard feedback text field
//as2 code: _mc.createTextField("feedback_txt",depth++,324,36,619,20);
var feedback_txt:TextField = new TextField();
feedback_txt.x = 324;
feedback_txt.y = 36;
feedback_txt.width = 619;
feedback_txt.height = 20;
_mc.addChild( feedback_txt );
_mc.feedback_txt.type = "dynamic";
_mc.feedback_txt.antiAliasType = "advanced";
_mc.feedback_txt.autoSize = true;
_mc.feedback_txt.wordWrap = true;
_mc.feedback_txt.html = true;
_mc.feedback_txt.multiline = true;
_mc.feedback_txt.embedFonts = true;
_mc.feedback_txt.selectable = true;
if( type == "correct" )
{
tries = 3;
if ( question_array[currentQuestion].type != 'single' )
{
_mc.feedback_txt.htmlText = "<p>Correct.</p>";
specifcFeedback1.visible = true;
specifcFeedback2.visible = true;
}
else
{
_mc.feedback_txt.htmlText = "<p>Correct.</p>";
specifcFeedback1.visible = true;
specifcFeedback2.visible = true;
}
_mc.feedback_txt.setTextFormat( feedbackFmt );
}
else
{
if ( tries > 1 )
{
tries++;
if ( question_array[currentQuestion].type != 'single' )
{
_mc.feedback_txt.htmlText = "<p>Incorrect. Review the correct answers below.</p>";
specifcFeedback1.visible = true;
specifcFeedback2.visible = true;
}
else if ( numDistractors == 2 )
{
_mc.feedback_txt.htmlText = "<p>Incorrect.</p>";
specifcFeedback1.visible = true;
specifcFeedback2.visible = true;
}
else
{
_mc.feedback_txt.htmlText = "<p>Incorrect. Review the correct answer below.</p>";
specifcFeedback1.visible = true;
specifcFeedback2.visible = true;
}
_mc.feedback_txt.setTextFormat( feedbackFmt );
specifcFeedback1.visible = true;
specifcFeedback2.visible = true;
}
else
{
tries++;
if ( question_array[currentQuestion].type != 'single' )
{
_mc.feedback_txt.htmlText = "<p>Try again.</p>";
}
else
{
_mc.feedback_txt.htmlText = "<p>Try again.</p>";
}
_mc.feedback_txt.setTextFormat( feedbackFmt );
}
}
}
function evtHandler( obj ):void
{
var temp:Object = obj.split("_");
switch( temp[0] )
{
case "distracter":
if( userAnswers_array[temp[1]] != undefined )
{
userAnswers_array[temp[1]] = undefined;
//as2 code: _mc[obj].selectionMarkColor.setRGB( 0xFFFFFF );
var selectionMarkColorTransform:ColorTransform = _mc[obj].selectionMarkColor.transform.colorTransform;
selectionMarkColorTransform.color = 0xFFFFFF;
_mc[obj].selectionMarkColor.transform.colorTransform = selectionMarkColorTransform;
}
else
{
//If the question type is single correct or t/f then clear
//all distractor boxes before marking current choices
if ( question_array[currentQuestion].type != "multi" )
{
var len:Number = tempNum2;
for( var i:int = 0; i<len; i++ )
{
userAnswers_array = undefined;
//as2 code: _mc["distracter_"+ i +"_mc"].selectionMarkColor.setRGB( 0xFFFFFF );
var selectionMarkColorTransform:ColorTransform = _mc["distracter_"+ i +"_mc"].selectionMarkColor.transform.colorTransform;
selectionMarkColorTransform.color = 0xFFFFFF;
_mc["distracter_"+ i +"_mc"].selectionMarkColor.transform.colorTransform = selectionMarkColorTransform;
}
}
userAnswers_array[temp[1]] = temp[1];
//as2 code: _mc[obj].selectionMarkColor.setRGB( 0x3366CC );
var selectionMarkColorTransform:ColorTransform = _mc[obj].selectionMarkColor.transform.colorTransform;
selectionMarkColorTransform.color = 0x3366CC;
_mc[obj].selectionMarkColor.transform.colorTransform = selectionMarkColorTransform;
}
setNavBtnState( "userSelection" );
break;
case "submit":
recordAnswers( userAnswers_array );
break;
}
}
function setNavBtnState( type ):void
{
switch( type )
{
case "newQuestion":
//as2 code: submit_mc.submitBrdrColor.setRGB( 0x000000 );
var submitBrdrColorTransform:ColorTransform = submit_mc.submitBrdrColor.transform.colorTransform;
submitBrdrColorTransform.color = 0x000000;
submit_mc.submitBrdrColor.transform.colorTransform = submitBrdrColorTransform;
submit_mc.alpha = 30;
submit_mc.useHandCursor = false;
submitDisabled = true;
break;
case "userSelection":
submit_mc.alpha = 100;
submit_mc.useHandCursor = true;
submitDisabled = false;
break;
case "submitAnswer":
submit_mc.alpha = 30;
submit_mc.useHandCursor = false;
submitDisabled = true;
break;
}
}
function init():void
{
createQuestion( currentQuestion );
setNavBtnState( "newQuestion" );
}