SlideShare a Scribd company logo
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

More Related Content

Similar to Gatcha for developers

AdVenture Capitalist Post-Mortem
AdVenture Capitalist Post-MortemAdVenture Capitalist Post-Mortem
AdVenture Capitalist Post-Mortem
PlayFab, Inc.
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
Christos Stathis
 
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-07
Frédéric Harper
 
CreateJS
CreateJSCreateJS
CreateJS
Jorge Solis
 
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
Robert Nyman
 
Asynchronous Programming at Netflix
Asynchronous Programming at NetflixAsynchronous Programming at Netflix
Asynchronous Programming at Netflix
C4Media
 
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
Frédéric Harper
 
A More Flash Like Web?
A More Flash Like Web?A More Flash Like Web?
A More Flash Like Web?
Murat Can ALPAY
 
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
 
Intro to HTML5
Intro to HTML5Intro to HTML5
Intro to HTML5
Jussi Pohjolainen
 
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
Fré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 2019
QADay
 
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
Fré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-09
Frédéric Harper
 
Android Things
Android ThingsAndroid Things
Android Things
Egor Andreevich
 
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
OXUS 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 to 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...
 

Recently uploaded

Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
Pixlogix Infotech
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Zilliz
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
TIPNGVN2
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 

Recently uploaded (20)

Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 

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