SlideShare uma empresa 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

Mais conteúdo relacionado

Semelhante 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
 

Semelhante 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

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 

Último (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

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