Hi All!
I am have been asked to alter a project to take a small memory game and insert/ pull details from a database rather than an xml doc (which it is at the moment). I havn’t done Actionscript before however i managed to get a small example working with as2, when it come to as3 i’m gettitng a bit lost.
i have the following xml doc
<flashMatch>
<settings>
<keepTrackOfCardFlips>true</keepTrackOfCardFlips>
<keepTrackOfTime>true</keepTrackOfTime>
<gridDimensions>6x3</gridDimensions>
<horizontalCardMargin>10</horizontalCardMargin>
<verticalCardMargin>10</verticalCardMargin>
<completeText><![CDATA[Congratulations!<br/><br/>You've completed The Match Game!!]]></completeText>
<timeText><![CDATA[You completed the game in %time% seconds!]]></timeText>
<cardFlipText><![CDATA[You completed the game in %flips% card flips!]]></cardFlipText>
</settings>
<cards>
<item>newimages/img1.jpg</item>
<item>newimages/img2.jpg</item>
<item>newimages/img3.jpg</item>
<item>newimages/img4.jpg</item>
<item>newimages/img5.jpg</item>
<item>newimages/img6.jpg</item>
<item>newimages/img7.jpg</item>
<item>newimages/img8.jpg</item>
<item>newimages/img9.jpg</item>
</cards>
</flashMatch>
and the following as3 code
//---------------------------------------------------
//config errors--------------------------------------
//---------------------------------------------------
function addConfigError(str){
configErrorText +=str+"<br/>";
configErrorFound=true;
}
function displayConfigErrors(){
//handles display of config errors
var errorField:TextField = new TextField();
errorField.multiline=true;
errorField.autoSize = TextFieldAutoSize.LEFT;
errorField.htmlText = "<font color='#FF0000'>"+configErrorText+"</font>";
addChild(errorField);
}
//---------------------------------------------------
//card handling--------------------------------------
//---------------------------------------------------
function fadeNextCard(evnt:Event){
cardARY[fadeCount].alpha=.3;
fadeCount++;
if(fadeCount>=cardARY.length){
fadeOutTimer.stop();
}
}
function showFinalScreen(evnt:Event){
textAnim.visible=true;
var myClickPattern:RegExp = /%flips%/;
var myTimePattern:RegExp = /%time%/;
cardFlipText = cardFlipText.replace(myClickPattern,totalClickCount);
var timeInSeconds = totalTimeUsed/1000;
timeText = timeText.replace(myTimePattern,timeInSeconds);
var htmlStr:String = "<b>"+completeText+"</b>";
if(keepTrackOfCardFlips == "true"){
htmlStr += "<br/><b>"+cardFlipText+"</b>";
}
if(keepTrackOfTime == "true"){
htmlStr += "<br/><b>"+timeText+"</b>";
}
textAnim.textHolder.completeText_TF.htmlText = htmlStr;
fadeOutTimer.start();
textAnim.gotoAndPlay("in");
}
function setMatch(val){
completedMatches++;
click1=0;
click2=0;
//find cards adn set to complete
var total = cardARY.length;
for(var i:uint = 0;i<total;i++){
var card = cardARY*;
if(card.myID == val){
card.completed=true;
}
}
if(completedMatches==totalImages){
//game complete
totalTimeUsed = getTimer()-totalTimeUsed;
gameCompleteTimer.start();
}
}
function cardClick(evnt:Event){
totalClickCount++;
if(totalTimeUsed==0){
totalTimeUsed=getTimer();
}
var me = evnt.target.parent.parent;
me.buttonMode=false;
me.removeEventListener(MouseEvent.CLICK,cardClick);
var myID = me.myID;
if(click1 == 0){
click1 = myID;
click1Ref=me;
}else{
//this is the second Click
if(click2==0){
click2 = myID;
click2Ref=me;
if(click1==click2){
//match made
trace("match");
setMatch(click1);
}else{
inCorrectTimer.start();
disableAll();
click1=0;
click2=0;
}
}else{
//this is the third Click..reset and start over
inCorrectTimer.start();
click1 = myID;
click2=0;
}
}
me.front.gotoAndPlay("reappear");
}
function resetCards(...rest){
trace("resetCards");
var total = cardARY.length;
for(var i:uint = 0;i<total;i++){
var card = cardARY*;
if(card.completed == 0){
card.buttonMode=true;
card.addEventListener(MouseEvent.CLICK,cardClick);
if(card.front.currentLabel == "show"){
card.front.gotoAndPlay("disappear");
}
}
}
}
function disableAll(){
var total = cardARY.length;
for(var i:uint = 0;i<total;i++){
var card = cardARY*;
card.buttonMode=false;
card.removeEventListener(MouseEvent.CLICK,cardClick);
}
}
function randomizeCards(){
cardARY = shuffle(cardARY);
var total:uint = cardARY.length;
var xLoc = horizontalCardMargin;
var yLoc = verticalCardMargin;
var row_Count:uint = 0;
var col_Count:uint = 0;
for(var i:uint=0;i<total;i++){
var thisCard = cardARY*;
thisCard.x = xLoc;
thisCard.y = yLoc;
xLoc += thisCard.width+horizontalCardMargin;
row_Count++;
if(row_Count >= rows){
xLoc=horizontalCardMargin;
row_Count=0;
col_Count++;
yLoc += thisCard.height+verticalCardMargin;
}
}
}
function loadImage(tgt1,tgt2,src,id){
//trace("src="+src);
var pictURLReq:URLRequest = new URLRequest(src);
var pictLdr:Loader = new Loader();
pictLdr.load(pictURLReq);
pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
function imgLoaded(evnt:Event){
totalLoaded++;
var image:Bitmap = Bitmap(pictLdr.content);
var imageDup:Bitmap = new Bitmap(image.bitmapData.clone());
tgt1.imgHolder.addChild(image);
tgt2.imgHolder.addChild(imageDup);
tgt1.myID = id;
tgt2.myID = id;
if(totalLoaded==totalImages){
//all images loaded and card created
randomizeCards();
}
}
}
//---------------------------------------------------
//data handling--------------------------------------
//---------------------------------------------------
function shuffle(arr){
var shuffled:Array = arr.slice();
for (var i:int=0; i<arr.length; i++)
{
var element:Object = shuffled*;
var rnd:int = Math.floor(arr.length * Math.random());
shuffled* = shuffled[rnd];
shuffled[rnd] = element;
}
return shuffled;
};
function loadXML(){
var myXML:XML = new XML();
var XML_URL:String = "flashmatch.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
function xmlLoaded(event:Event):void
{
myXML = XML(myLoader.data);
totalImages = myXML.cards.child("item").length();
gridDimensions = myXML.settings.gridDimensions;
keepTrackOfCardFlips = myXML.settings.keepTrackOfCardFlips.toLowerCase();
keepTrackOfTime = myXML.settings.keepTrackOfTime.toLowerCase();
horizontalCardMargin = myXML.settings.horizontalCardMargin;
verticalCardMargin = myXML.settings.verticalCardMargin;
completeText = myXML.settings.completeText;
timeText = myXML.settings.timeText;
cardFlipText = myXML.settings.cardFlipText;
if(gridDimensions.indexOf("x")==-1){
addConfigError("Grid Dimensions must be in this format: 4x2");
}else{
var gridSplit = gridDimensions.split("x");
rows = new uint(gridSplit[0]);
trace("rows="+rows);
cols = new uint(gridSplit[1]);
var totalByGridCalc = rows*cols;
var totalByXMLCount = totalImages*2;
if(totalByGridCalc != totalByXMLCount){
var totalDiff = (totalByGridCalc - totalByXMLCount)/2;
addConfigError("You need "+totalDiff+" more image(s) to complete a "+gridDimensions+" grid");
}
trace("totalByGridCalc="+totalByGridCalc);
}
if(configErrorFound==false){
var localID:uint = 1;
for(var k:uint=0;k<totalImages;k++){
var img:String = myXML.cards.item[k];
var card = new cardClip();
var altCard = new cardClip();
card.front.gotoAndStop("hide");
altCard.front.gotoAndStop("hide");
cardARY.push(card);
cardARY.push(altCard);
cardHolder.addChild(card);
cardHolder.addChild(altCard);
card.buttonMode=true;
altCard.buttonMode=true;
card.addEventListener(MouseEvent.CLICK,cardClick);
altCard.addEventListener(MouseEvent.CLICK,cardClick);
loadImage(card,altCard,img,localID);
localID++;
}
}else{
displayConfigErrors();
}
}
}
function playAgain(...rest){
gotoAndPlay(2);
}
//---------------init-----------------
textAnim.visible=false;
var configErrorFound:Boolean = false;
var configErrorText:String = "XML Configuration errors:<br/><br/>";
var totalLoaded:uint=0;
var totalImages:uint = 0;
var gridDimensions:String = "";
var rows:uint = 0;
var cols:uint = 0;
var keepTrackOfCardFlips:String = "true";
var keepTrackOfTime:String = "true";
var horizontalCardMargin:int = 0;
var verticalCardMargin:int = 0;
var completeText:String="";
var timeText:String="";
var cardFlipText:String="";
var completedMatches:uint = 0;
var totalClickCount:uint=0;
var totalTimeUsed:uint=0;
var click1:uint;//used to store card clicks
var click2:uint;//used to store card clicks
var click1Ref;
var click2Ref;
var cardARY:Array = new Array();//hold the URLs of the images to load
var inCorrectTimer:Timer = new Timer(700,1);
inCorrectTimer.addEventListener(TimerEvent.TIMER,resetCards);
var gameCompleteTimer:Timer = new Timer(1000,1);
gameCompleteTimer.addEventListener(TimerEvent.TIMER,showFinalScreen);
var fadeOutTimer:Timer = new Timer(50);
fadeOutTimer.addEventListener(TimerEvent.TIMER,fadeNextCard);
var fadeCount:uint = 0;
loadXML();
stop();
My question is how can i change this to acept variable from the database (ideally via php)? I have tried to add code like
var MyClickPattern = evt.target.data.clicks
which i tried to pull from a static php script however every time i add any code or amend anything the script loops all the time? Can anyone point me in the right direction?