SlideShare una empresa de Scribd logo
1 de 54
GATCHA!
        VELO PERS
 FO R DE



                Pieter De Schepper
      Gatcha! Head Of Development
                       EXP: 254.186
WHO AM I ?
PHP DEVELOPER

        API’S
                                2,5 YEARS
                               AT NETLOG
         OPENSOCIAL

                INTEGRATIONS


                                  1 YEAR
 LEAD DEVELOPER
                               AT GATCHA!
WHAT IS GATCHA?
“Gatcha! wants to bring people
  together through gaming,
     wherever they are”
“Gatcha! builds and distributes
            games to
social networks and web-portals”
Every single day:

    over 1M game plays
over 2200 days of play time
over 120 000 unique players
Grown and successful as one of
      Netlogʼs features

      Since Feb 2011 a
    seperate business unit
      in Massive Media
GATCHA!
            ME Y GA
     RATI NG M
INTEG
A ME          High-score Handling
      R G
YOU                         Achievements
                   A ME    Challenge builder
           IA LG             Tournaments
       S OC
  OP
AT
Example Game
- Game runs inside FP 10 Gatcha Wrapper

- Communication through Events
-> Game Events

- Include SWC found at gatcha.com
     - GameEvent
     - Translations
     - SafeMemory
Import classes


package
{
!   import   com.gatcha.api.GameEvent;
!   import   com.gatcha.api.Translations;
!   import   com.gatcha.memory.SafeMemory;
!
!   public   class KartOn
!   {
!
!   }
}
GAME TRACKING
Start Game
Asynchronous start
                           Using game events

private function onMouseClickStartButton(e:MouseEvent):void
{
!   addEventListener(GameEvent.SINGLEPLAYER_START_GAME_RESULT, gatchaStartGameHandler);

!   var gatchaStartGameEvent:GameEvent = new GameEvent(GameEvent.SINGLEPLAYER_START_GAME);
!   dispatchEvent(gatchaStartGameEvent);
}

private function gatchaStartGameHandler(event:GameEvent):void
{
!   startGame();
}
End Game
                  Tell Gatcha Game has ended


private function raceFinished():void
{
!   endGame();
}

private function endGame():void
{
!   var gatchaEndGameEvent:GameEvent = new GameEvent(GameEvent.SINGLEPLAYER_END_GAME);
!   dispatchEvent(gatchaEndGameEvent);
}
Gameplay stats
                                   Popularity
total, uniques, duration




     Target game
          Age
        Gender             Viral
        Location
HIGHSCORES
Time




Position
Sending Highscores
                           With GameEvents
private function raceFinished():void
{
!   var score:Number = calculateHighscore();
!   updateHighscore(score);
}

private function updateHighscore(score:Number):void
{
!   addEventListener(GameEvent.SINGLEPLAYER_UPDATE_HIGHSCORE_RESULT, scoreResultHandler);
!   addEventListener(GameEvent.SINGLEPLAYER_UPDATE_HIGHSCORE_FAIL, scoreFailHandler);

!   var event:GameEvent = new GameEvent(GameEvent.SINGLEPLAYER_UPDATE_HIGHSCORE, score);
!   dispatchEvent(event);
}

private function scoreResultHandler(event:GameEvent):void
{
!   endGame();
}

private function scoreResultFailed(event:GameEvent):void
{
!   //Woops, something went wrong
}
Highscore and position




Leaderboards
Viral effect




Soon
 - Challenges
 - Tournaments
 - Team Play
ACHIEVEMENTS
 “Pass all other cars in one lap”
Sending Achievements
                          With GameEvents
private function passedAllCars():void
{
!   var aggressiveAchievement:Object = {
!   !    achievement: "AGGRESSIVE",
!   !    title: "Aggressive Driver",
!   !    description: "Pass all other drivers in one lap",
!   !    icon: 'aggressive.png'
!   }
!
!   sendAchievement(aggressiveAchievement);
}

private function sendAchievement(achievement:Object):void
{
!   var achEvent:GameEvent = new GameEvent(GameEvent.ACHIEVEMENT_REACHED, achievement);
!   dispatchEvent(achEvent);
}
PERSISTENT
 STORAGE
SharedObject (Flash Cookies)

                     - Confusing
                     - Intrusive
                     - Bad Usability
                     - Unreliable



             Persistent Storage
Store Data
                             With GameEvents

private function raceFinished(level:Number):void
{
!   unlockLevel(level + 1);
!   var score:Number = calculateHighscore();
!   updateHighscore(score);
}

private function unlockLevel(level:Number):void
{
!   storeValue(‘unlockedLevel’, level);
}

private function storeValue(key:String, value:String):void
{
!   var data:Object = {
!   !    "key": key,
!   !    "value": value
!   };
!
!   var storeEvent:GameEvent = new GameEvent(GameEvent.PUT_PERSISTENT_STORAGE, data);
!   dispatchEvent(storeEvent);
}
Retrieve Data
                             With GameEvents

private function getValue(key:String):void
{
!   addEventListener(GameEvent.GET_PERSISTENT_STORAGE_RESULT, getValueResultHandler);
!   addEventListener(GameEvent.GET_PERSISTENT_STORAGE_FAIL, getValueFailHandler);
!
!   var getEvent:GameEvent = new GameEvent(GameEvent.GET_PERSISTENT_STORAGE, key);
!   dispatchEvent(getEvent);
}

private function getValueResultHandler(event:GameEvent):void
{
!   var value:String = event.data;
!   //Do something with value
}

private function getValueFailHandler(event:GameEvent):void
{
!   //Woops, something went wrong
}
Delete Data
                             With GameEvents


private function deleteValue(key:String):void
{
!   addEventListener(GameEvent.DELETE_PERSISTENT_STORAGE_RESULT, deleteValueResultHandler);
!   addEventListener(GameEvent.DELETE_PERSISTENT_STORAGE_FAIL, deleteValueFailHandler);
!
!   var getEvent:GameEvent = new GameEvent(GameEvent.DELETE_PERSISTENT_STORAGE, key);
!   dispatchEvent(getEvent);
}

private function deleteValueResultHandler(event:GameEvent):void
{
!   //Deletion succeeded
}

private function deleteValueFailHandler(event:GameEvent):void
{
!   //Woops, something went wrong
}
TRANSLATIONS
34
LANGUAGES
  Translation API
Setting up translations




<?xml version="1.0" encoding="UTF-8" ?>
<messagebundle>
!   <msg name="labelTotalScore">Total Score</msg>
!   <msg name="controlsAccelerate">Accelerate</msg>
!   <msg name="controlsBrake">Brake</msg>
!   <msg name="controlsLeft">Steer left</msg>
!   <msg name="controlsRight">Steer right</msg>
!   <msg name="controlsPause">Pause</msg>
</messagebundle>
Accessing translations


private function setTranslations():void
{
!   var totalScoreLabel:TextField = new TextField();
!   totalScoreLabel.text = Translations.instance.getString("labelTotalScore");
!
!   var accelerateLabel:TextField = new TextField();
!   accelerateLabel.text = Translations.instance.getString("controlsAccelerate");
!
!   var brakeLabel:TextField = new TextField();
!   brakeLabel.text = Translations.instance.getString("controlsBrake");
!
!   var leftLabel:TextField = new TextField();
!   leftLabel.text = Translations.instance.getString("controlsLeft");
!
!   var rightLabel:TextField = new TextField();
!   rightLabel.text = Translations.instance.getString("controlsRight");
!
!   var pauseLabel:TextField = new TextField();
!   pauseLabel.text = Translations.instance.getString("controlsPause");
}
ENGLISH
FRENCH
DUTCH
GERMAN
ITALIAN
CHEATERS
SafeMemory

private function initScore():void()
{
!   SafeMemory.instance.setValue("score", 0);
}

private function incrementScore(increment:Number):void()
{
!   SafeMemory.instance.incrementValue("score", increment);
!   /*
!      Also available
!      SafeMemory.instance.decrementValue("score",1);
       SafeMemory.instance.multiplyValue("score",10);
       SafeMemory.instance.divideValue("score",2);!
!    */
}

private function updateScoreLabel():void
{
!   scoreLabel.text = SafeMemory.instance.getValue("score");
}
MONETIZATION
Micropayments
Netlog - Credits
Netlog Credits
private function buyNewCar():void()
{
!   var data:Object = {
!   !    amount: 50,
!   !    reason: “Would you like to pay 50 credits for the superkart?”
!   };
!
!   this.stage.addEventListener(GameEvent.GET_CREDITS_RESULT, creditsResultHandler);
!   this.stage.addEventListener(GameEvent.GET_CREDITS_FAIL, creditsFailHandler);

!   var getCreditsEvent:GameEvent = new GameEvent(GameEvent.GET_CREDITS, data);
!   dispatchEvent(getCreditsEvent);
}

private function creditsResultHandler(event:GameEvent):void()
{
!   //User had payed, give him the car
!   //Store it in Persistent Storage API :-)
}

private function creditsResultHandler(event:GameEvent):void()
{
!   //User has canceled payment
}
More information



       GATCHA!
http://www.gatcha.com/developers

     http://wiki.gatcha.com
GATCHA!
        RUIT ING!
  REC
Web Developer (PHP)

       Designer

    Product Manager

Q&A Manager / Marketeer
GATCHA!

             pieter@gatcha.com
           http://netlog.com/pieter
         http://twitter.com/pieterds
http://be.linkedin.com/in/deschepperpieter

Más contenido relacionado

Similar a Gatcha for developers

AdVenture Capitalist Post-Mortem
AdVenture Capitalist Post-MortemAdVenture Capitalist Post-Mortem
AdVenture Capitalist Post-MortemPlayFab, Inc.
 
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 Cutting edge HTML5 API you can use today (by Bohdan Rusinka) Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)Binary Studio
 
HTML pour le web mobile, Firefox OS - Devfest Nantes - 2014-11-07
HTML pour le web mobile, Firefox OS - Devfest Nantes - 2014-11-07HTML pour le web mobile, Firefox OS - Devfest Nantes - 2014-11-07
HTML pour le web mobile, Firefox OS - Devfest Nantes - 2014-11-07Frédéric Harper
 
Firefox OS learnings & visions, WebAPIs - budapest.mobile
Firefox OS learnings & visions, WebAPIs - budapest.mobileFirefox OS learnings & visions, WebAPIs - budapest.mobile
Firefox OS learnings & visions, WebAPIs - budapest.mobileRobert Nyman
 
Asynchronous Programming at Netflix
Asynchronous Programming at NetflixAsynchronous Programming at Netflix
Asynchronous Programming at NetflixC4Media
 
Firefox OS, HTML5 to the next level - Python Montreal - 2014-05-12
Firefox OS, HTML5 to the next level - Python Montreal - 2014-05-12Firefox OS, HTML5 to the next level - Python Montreal - 2014-05-12
Firefox OS, HTML5 to the next level - Python Montreal - 2014-05-12Frédéric Harper
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?Ankara JUG
 
HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?Remy Sharp
 
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22Frédéric Harper
 
ЄВГЕН РУДЄВ «Multiplayer game testing in actions» QADay 2019
ЄВГЕН РУДЄВ «Multiplayer game testing in actions» QADay 2019ЄВГЕН РУДЄВ «Multiplayer game testing in actions» QADay 2019
ЄВГЕН РУДЄВ «Multiplayer game testing in actions» QADay 2019GoQA
 
Firefox OS, fixing the mobile web - FITC Toronto - 2014-04-28
Firefox OS, fixing the mobile web - FITC Toronto - 2014-04-28Firefox OS, fixing the mobile web - FITC Toronto - 2014-04-28
Firefox OS, fixing the mobile web - FITC Toronto - 2014-04-28Frédéric Harper
 
HTML, not just for desktops: Firefox OS - Congreso Universitario Móvil - 201...
HTML, not just for desktops: Firefox OS - Congreso Universitario Móvil - 201...HTML, not just for desktops: Firefox OS - Congreso Universitario Móvil - 201...
HTML, not just for desktops: Firefox OS - Congreso Universitario Móvil - 201...Frédéric Harper
 
Firefox OS, une plateforme à découvrir - IO Saglac - 2014-09-09
Firefox OS, une plateforme à découvrir - IO Saglac - 2014-09-09Firefox OS, une plateforme à découvrir - IO Saglac - 2014-09-09
Firefox OS, une plateforme à découvrir - IO Saglac - 2014-09-09Frédéric Harper
 
Java Virtual Keyboard Using Robot, Toolkit and JToggleButton Classes
Java Virtual Keyboard Using Robot, Toolkit and JToggleButton ClassesJava Virtual Keyboard Using Robot, Toolkit and JToggleButton Classes
Java Virtual Keyboard Using Robot, Toolkit and JToggleButton ClassesOXUS 20
 
Web on TV - the joy and (mostly) pain of TV development / jQuery Europe / Vie...
Web on TV - the joy and (mostly) pain of TV development / jQuery Europe / Vie...Web on TV - the joy and (mostly) pain of TV development / jQuery Europe / Vie...
Web on TV - the joy and (mostly) pain of TV development / jQuery Europe / Vie...Patrick Lauke
 

Similar a Gatcha for developers (20)

AdVenture Capitalist Post-Mortem
AdVenture Capitalist Post-MortemAdVenture Capitalist Post-Mortem
AdVenture Capitalist Post-Mortem
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 Cutting edge HTML5 API you can use today (by Bohdan Rusinka) Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
Cutting edge HTML5 API you can use today (by Bohdan Rusinka)
 
HTML pour le web mobile, Firefox OS - Devfest Nantes - 2014-11-07
HTML pour le web mobile, Firefox OS - Devfest Nantes - 2014-11-07HTML pour le web mobile, Firefox OS - Devfest Nantes - 2014-11-07
HTML pour le web mobile, Firefox OS - Devfest Nantes - 2014-11-07
 
CreateJS
CreateJSCreateJS
CreateJS
 
Firefox OS learnings & visions, WebAPIs - budapest.mobile
Firefox OS learnings & visions, WebAPIs - budapest.mobileFirefox OS learnings & visions, WebAPIs - budapest.mobile
Firefox OS learnings & visions, WebAPIs - budapest.mobile
 
Asynchronous Programming at Netflix
Asynchronous Programming at NetflixAsynchronous Programming at Netflix
Asynchronous Programming at Netflix
 
Firefox OS, HTML5 to the next level - Python Montreal - 2014-05-12
Firefox OS, HTML5 to the next level - Python Montreal - 2014-05-12Firefox OS, HTML5 to the next level - Python Montreal - 2014-05-12
Firefox OS, HTML5 to the next level - Python Montreal - 2014-05-12
 
A More Flash Like Web?
A More Flash Like Web?A More Flash Like Web?
A More Flash Like Web?
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?
 
HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?
 
Intro to HTML5
Intro to HTML5Intro to HTML5
Intro to HTML5
 
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
HTML for the Mobile Web, Firefox OS - All Things Open - 2014-10-22
 
ЄВГЕН РУДЄВ «Multiplayer game testing in actions» QADay 2019
ЄВГЕН РУДЄВ «Multiplayer game testing in actions» QADay 2019ЄВГЕН РУДЄВ «Multiplayer game testing in actions» QADay 2019
ЄВГЕН РУДЄВ «Multiplayer game testing in actions» QADay 2019
 
Firefox OS, fixing the mobile web - FITC Toronto - 2014-04-28
Firefox OS, fixing the mobile web - FITC Toronto - 2014-04-28Firefox OS, fixing the mobile web - FITC Toronto - 2014-04-28
Firefox OS, fixing the mobile web - FITC Toronto - 2014-04-28
 
HTML, not just for desktops: Firefox OS - Congreso Universitario Móvil - 201...
HTML, not just for desktops: Firefox OS - Congreso Universitario Móvil - 201...HTML, not just for desktops: Firefox OS - Congreso Universitario Móvil - 201...
HTML, not just for desktops: Firefox OS - Congreso Universitario Móvil - 201...
 
Firefox OS, une plateforme à découvrir - IO Saglac - 2014-09-09
Firefox OS, une plateforme à découvrir - IO Saglac - 2014-09-09Firefox OS, une plateforme à découvrir - IO Saglac - 2014-09-09
Firefox OS, une plateforme à découvrir - IO Saglac - 2014-09-09
 
Android Things
Android ThingsAndroid Things
Android Things
 
Java Virtual Keyboard Using Robot, Toolkit and JToggleButton Classes
Java Virtual Keyboard Using Robot, Toolkit and JToggleButton ClassesJava Virtual Keyboard Using Robot, Toolkit and JToggleButton Classes
Java Virtual Keyboard Using Robot, Toolkit and JToggleButton Classes
 
Web on TV - the joy and (mostly) pain of TV development / jQuery Europe / Vie...
Web on TV - the joy and (mostly) pain of TV development / jQuery Europe / Vie...Web on TV - the joy and (mostly) pain of TV development / jQuery Europe / Vie...
Web on TV - the joy and (mostly) pain of TV development / jQuery Europe / Vie...
 

Último

TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 

Último (20)

TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 

Gatcha for developers

  • 1. GATCHA! VELO PERS FO R DE Pieter De Schepper Gatcha! Head Of Development EXP: 254.186
  • 3. PHP DEVELOPER API’S 2,5 YEARS AT NETLOG OPENSOCIAL INTEGRATIONS 1 YEAR LEAD DEVELOPER AT GATCHA!
  • 5. “Gatcha! wants to bring people together through gaming, wherever they are”
  • 6. “Gatcha! builds and distributes games to social networks and web-portals”
  • 7. Every single day: over 1M game plays over 2200 days of play time over 120 000 unique players
  • 8. Grown and successful as one of Netlogʼs features Since Feb 2011 a seperate business unit in Massive Media
  • 9. GATCHA! ME Y GA RATI NG M INTEG
  • 10. A ME High-score Handling R G YOU Achievements A ME Challenge builder IA LG Tournaments S OC OP AT
  • 12. - Game runs inside FP 10 Gatcha Wrapper - Communication through Events -> Game Events - Include SWC found at gatcha.com - GameEvent - Translations - SafeMemory
  • 13. Import classes package { ! import com.gatcha.api.GameEvent; ! import com.gatcha.api.Translations; ! import com.gatcha.memory.SafeMemory; ! ! public class KartOn ! { ! ! } }
  • 16. Asynchronous start Using game events private function onMouseClickStartButton(e:MouseEvent):void { ! addEventListener(GameEvent.SINGLEPLAYER_START_GAME_RESULT, gatchaStartGameHandler); ! var gatchaStartGameEvent:GameEvent = new GameEvent(GameEvent.SINGLEPLAYER_START_GAME); ! dispatchEvent(gatchaStartGameEvent); } private function gatchaStartGameHandler(event:GameEvent):void { ! startGame(); }
  • 17.
  • 18. End Game Tell Gatcha Game has ended private function raceFinished():void { ! endGame(); } private function endGame():void { ! var gatchaEndGameEvent:GameEvent = new GameEvent(GameEvent.SINGLEPLAYER_END_GAME); ! dispatchEvent(gatchaEndGameEvent); }
  • 19. Gameplay stats Popularity total, uniques, duration Target game Age Gender Viral Location
  • 22. Sending Highscores With GameEvents private function raceFinished():void { ! var score:Number = calculateHighscore(); ! updateHighscore(score); } private function updateHighscore(score:Number):void { ! addEventListener(GameEvent.SINGLEPLAYER_UPDATE_HIGHSCORE_RESULT, scoreResultHandler); ! addEventListener(GameEvent.SINGLEPLAYER_UPDATE_HIGHSCORE_FAIL, scoreFailHandler); ! var event:GameEvent = new GameEvent(GameEvent.SINGLEPLAYER_UPDATE_HIGHSCORE, score); ! dispatchEvent(event); } private function scoreResultHandler(event:GameEvent):void { ! endGame(); } private function scoreResultFailed(event:GameEvent):void { ! //Woops, something went wrong }
  • 24. Viral effect Soon - Challenges - Tournaments - Team Play
  • 25. ACHIEVEMENTS “Pass all other cars in one lap”
  • 26. Sending Achievements With GameEvents private function passedAllCars():void { ! var aggressiveAchievement:Object = { ! ! achievement: "AGGRESSIVE", ! ! title: "Aggressive Driver", ! ! description: "Pass all other drivers in one lap", ! ! icon: 'aggressive.png' ! } ! ! sendAchievement(aggressiveAchievement); } private function sendAchievement(achievement:Object):void { ! var achEvent:GameEvent = new GameEvent(GameEvent.ACHIEVEMENT_REACHED, achievement); ! dispatchEvent(achEvent); }
  • 27.
  • 28.
  • 30.
  • 31. SharedObject (Flash Cookies) - Confusing - Intrusive - Bad Usability - Unreliable Persistent Storage
  • 32. Store Data With GameEvents private function raceFinished(level:Number):void { ! unlockLevel(level + 1); ! var score:Number = calculateHighscore(); ! updateHighscore(score); } private function unlockLevel(level:Number):void { ! storeValue(‘unlockedLevel’, level); } private function storeValue(key:String, value:String):void { ! var data:Object = { ! ! "key": key, ! ! "value": value ! }; ! ! var storeEvent:GameEvent = new GameEvent(GameEvent.PUT_PERSISTENT_STORAGE, data); ! dispatchEvent(storeEvent); }
  • 33. Retrieve Data With GameEvents private function getValue(key:String):void { ! addEventListener(GameEvent.GET_PERSISTENT_STORAGE_RESULT, getValueResultHandler); ! addEventListener(GameEvent.GET_PERSISTENT_STORAGE_FAIL, getValueFailHandler); ! ! var getEvent:GameEvent = new GameEvent(GameEvent.GET_PERSISTENT_STORAGE, key); ! dispatchEvent(getEvent); } private function getValueResultHandler(event:GameEvent):void { ! var value:String = event.data; ! //Do something with value } private function getValueFailHandler(event:GameEvent):void { ! //Woops, something went wrong }
  • 34. Delete Data With GameEvents private function deleteValue(key:String):void { ! addEventListener(GameEvent.DELETE_PERSISTENT_STORAGE_RESULT, deleteValueResultHandler); ! addEventListener(GameEvent.DELETE_PERSISTENT_STORAGE_FAIL, deleteValueFailHandler); ! ! var getEvent:GameEvent = new GameEvent(GameEvent.DELETE_PERSISTENT_STORAGE, key); ! dispatchEvent(getEvent); } private function deleteValueResultHandler(event:GameEvent):void { ! //Deletion succeeded } private function deleteValueFailHandler(event:GameEvent):void { ! //Woops, something went wrong }
  • 35.
  • 38. Setting up translations <?xml version="1.0" encoding="UTF-8" ?> <messagebundle> ! <msg name="labelTotalScore">Total Score</msg> ! <msg name="controlsAccelerate">Accelerate</msg> ! <msg name="controlsBrake">Brake</msg> ! <msg name="controlsLeft">Steer left</msg> ! <msg name="controlsRight">Steer right</msg> ! <msg name="controlsPause">Pause</msg> </messagebundle>
  • 39. Accessing translations private function setTranslations():void { ! var totalScoreLabel:TextField = new TextField(); ! totalScoreLabel.text = Translations.instance.getString("labelTotalScore"); ! ! var accelerateLabel:TextField = new TextField(); ! accelerateLabel.text = Translations.instance.getString("controlsAccelerate"); ! ! var brakeLabel:TextField = new TextField(); ! brakeLabel.text = Translations.instance.getString("controlsBrake"); ! ! var leftLabel:TextField = new TextField(); ! leftLabel.text = Translations.instance.getString("controlsLeft"); ! ! var rightLabel:TextField = new TextField(); ! rightLabel.text = Translations.instance.getString("controlsRight"); ! ! var pauseLabel:TextField = new TextField(); ! pauseLabel.text = Translations.instance.getString("controlsPause"); }
  • 42. DUTCH
  • 46. SafeMemory private function initScore():void() { ! SafeMemory.instance.setValue("score", 0); } private function incrementScore(increment:Number):void() { ! SafeMemory.instance.incrementValue("score", increment); ! /* ! Also available ! SafeMemory.instance.decrementValue("score",1); SafeMemory.instance.multiplyValue("score",10); SafeMemory.instance.divideValue("score",2);! ! */ } private function updateScoreLabel():void { ! scoreLabel.text = SafeMemory.instance.getValue("score"); }
  • 49. Netlog Credits private function buyNewCar():void() { ! var data:Object = { ! ! amount: 50, ! ! reason: “Would you like to pay 50 credits for the superkart?” ! }; ! ! this.stage.addEventListener(GameEvent.GET_CREDITS_RESULT, creditsResultHandler); ! this.stage.addEventListener(GameEvent.GET_CREDITS_FAIL, creditsFailHandler); ! var getCreditsEvent:GameEvent = new GameEvent(GameEvent.GET_CREDITS, data); ! dispatchEvent(getCreditsEvent); } private function creditsResultHandler(event:GameEvent):void() { ! //User had payed, give him the car ! //Store it in Persistent Storage API :-) } private function creditsResultHandler(event:GameEvent):void() { ! //User has canceled payment }
  • 50.
  • 51. More information GATCHA! http://www.gatcha.com/developers http://wiki.gatcha.com
  • 52. GATCHA! RUIT ING! REC
  • 53. Web Developer (PHP) Designer Product Manager Q&A Manager / Marketeer
  • 54. GATCHA! pieter@gatcha.com http://netlog.com/pieter http://twitter.com/pieterds http://be.linkedin.com/in/deschepperpieter