
Today I got the chance to finally play with the awesome game platform by Almog Design (www.almogdesign.net) called Scoreoid.
What Scoreoid is:
Scoreoid is a non-restrictive, reliable and easy to use gaming platform designed to handle scoring, leaderboards and game management, including advanced functions for multi-platform games such as platform content awareness to advanced player management. Developed by game developers for game developers.
(Info from www.scoreoid.net)
Why Scoreoid:
The reason I´m thrilled about Scoreoid is simply because it lets you cut time on an otherwise potentially time exhaustive part of game development, scores.
With that said I thought I´d write a basic tutorial.
Using Scoreoid:
Getting started with Scoreoid is a breeze, all you really need to do is to sign up (www.scoreoid.com/register) and to add a game, the rest is taken cared of by Scoreoid!
To create a game simply navigate to the dashboard and click on “Add new game”. There´s some basic data you need to enter, nothing weird so I leave that up to you.
There´s actually tons of stuff you can do here, and I do recommend you to check it out, but to get to get started on this tutorial you´ll need 2 things:
An API-key
found under your Account Info.
A Game-ID
found under games and specific for the game you´re working on.
Scoreoid + Flash:
Here´s where the magic happens, no downloads – no nothing.
From here on I´ll show you just the absolute basics needed to get you started on a real world situation.
Please note that his example doesn´t necessary follow best practices and how you end up using this is up to you. Also note that I´m writing this inside a document class.
The Document class (Main.as)
package { //SCOREOID - www.scoreoid.net | www.scoreoid.com import flash.display.MovieClip; import flash.net.URLVariables; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLLoaderDataFormat; import flash.net.URLLoader; import flash.events.Event; public class Main extends MovieClip { //setup: private var url:String = "https://www.scoreoid.com/api/getGameField"; private var request:URLRequest; private var requestVars:URLVariables; private var apiKey:String = "enter your API-key"; private var gameId:String = "enter your game-ID"; private var responseType:String = "XML"; private var ulGetScore:URLLoader = new URLLoader(); private var ulSendScore:URLLoader = new URLLoader(); public function Main() { /* Send a score to Scoreoid containing the name of the user and his or hers score */ sendScore("Player name", "player score e.g 8278"); /* Show the score on stage */ getScores(); }
The sendScore function
This simple function recieves two values passed in as strings: user and score.
We start by pointing the url variable to the appropiate API-call, in this case the one called “createScore” and continue by packing a request handler with data.
The data is contained by an URLVariable we call requestVars which stores the fundamental elements needed to talk to Scoreoid (API-key / game-ID etc…)
Before sending the request we make sure to pass in the two crucial variables needed (score and user, both strings).
private function sendScore(user:String, score:String):void { url = "https://www.scoreoid.com/api/createScore"; request = new URLRequest(url); requestVars = new URLVariables(); request.data = requestVars; requestVars.api_key = apiKey; requestVars.game_id = gameId; requestVars.response = responseType; /* send score variables: */ requestVars.score = score; requestVars.username = user; request.method = URLRequestMethod.POST; ulSendScore.dataFormat = URLLoaderDataFormat.TEXT; ulSendScore.addEventListener(Event.COMPLETE, sendScoreCompleteHandler); ulSendScore.load(request); }
Listen for a respond
By casting the data send back from Scoreoid as xml we´re able to check against a string “The score has been saved” to assure that the score we just send in fact got processed and saved by Scoreoid.
//Send score complete handler: private function sendScoreCompleteHandler(e:Event):void { //sending scores to scoreoid... var xml:XML = new XML(e.target.data); if (xml == "The score has been saved") { trace("The score has been saved.") } }
Get scores – using it all
This function looks a lot like the sendScore function and would definitly need some cleanup considering the main difference lies in the url (getScores) and the score variables.
The get score variables:
Again, there´s plenty more to check out but to receive the 4 highest scores we use “limit” to limit the result, “order_by” to order the result by score values (“name” would give you a list ordered in alphabetical order) and lastly “dsc” to get the highest score first.
private function getScores():void { url = "https://www.scoreoid.com/api/getScores"; request = new URLRequest(url); requestVars = new URLVariables(); request.data = requestVars; requestVars.api_key = apiKey; requestVars.game_id = gameId; requestVars.response = responseType; /* get score variables: */ requestVars.limit = 4; requestVars.order_by = "score"; requestVars.order = "dsc"; request.method = URLRequestMethod.POST; ulGetScore.dataFormat = URLLoaderDataFormat.TEXT; ulGetScore.addEventListener(Event.COMPLETE, getScoreCompleteHandler); ulGetScore.load(request); }
Putting it out there!
Inside our handler we cast the Scoreoid respond once again as xml and loop through each player object to put a movieclip on stage.
The movieclip we´re using lies inside the Flash IDE library exported for actionscript with the linkage name “PlayerResult”.
PlayerResult:
Contains two dynamic textfields: “name_t” for names and “score_t” for scores.
Scoreoid values:
To show something in our textfields we use “player.@username” and “player.score.@score”.
//Get score complete handler: private function getScoreCompleteHandler(e:Event):void { var scoreXML:XML = new XML(e.target.data); var playerResult:MovieClip; var pX:Number = 86; var pY:Number = 116; for each (var player:Object in scoreXML.player) { //show results on stage: playerResult = new PlayerResult(); playerResult.x = pX; playerResult.y = pY; playerResult.name_t.text = player.@username; playerResult.score_t.text = player.score.@score; addChild(playerResult); pY += playerResult.height -1; } } } }
Presto!
That´s all there is to it really, again you could propably optimize this to half the size but that´s not really the point here.
This is the end result btw:
So download the fla if you want and get your ass over to www.scoreoid.net!
Cheers!
/Nicolás
genio!!
Im trying to learn this API. i downloaded your source. Changed the strings ect, to mine, no errors. Getting the traces. the table is being generated, but no names or scores? do you know why?
do you have an account at scoreoid.com? you´ll need to setup a game with them to receive the keys needed in this tutorial, also for demoing purposes of the tutorial what I did is that I manually added players and scores using the dashboard provided by scoreoid, otherwise the tables would remain empty. Good luck! / Nicolás
Very informative! Scoreoid is promising, but it lacks an SDK.
I created the perfect Scoreoid AS3 SDK.
http://www.rivellomultimediaconsulting.com/scoreoid-as3-sdk/
-RMC
Many thanks! It works very well indeed…