SlideShare une entreprise Scribd logo
Développement jeux
Android
Retour d’expérience
Lead developper plateforme
cloud mobile chez Sage
Développeur de
Space Corsair
• Introduction au développement mobile
• Comment développer son premier jeu
• Monétiser son projet
• Conseils pour réussir sa sortie
Plan de la présentation
Statistiques sur le jeu vidéo mobile
• Un marché estimé à 22 Milliards de $ en 2015
• 80% des revenus mobile viennent des jeux
• En 2012, les 25 premiers développeurs prennent à eux
seuls 50% des revenus.
• Dépense moyenne de 21$ par joueur en 2011
• 80 % des développeurs mobile ne gagnent pas assez
pour en faire une activité principale.
Pourquoi développer son jeu?
• Apprendre, développer ses compétences
• Ajouter une expérience sur son CV
• Revenus complémentaires
• S’évader des contraintes de son emploi principal
• Sortie sur le marché d’un vrai produit ( préparation
marketing, publicité)
Dur développer un jeu?
On peut faire un jeu à succès en utilisant uniquement les
composants d’une application Android non ludique
(quizz , jeu de gestion).
La complexité dépend du type de jeu et de son
expérience en développement, l’important c’est de
choisir un projet à sa portée.
Différents types de jeux mobiles
• 3D / simulation (Asphalt)
• 2D / action rpg ( Space corsair)
• Réflexion / physique (angry birds, cut the rope)
• 2D scrolling ( jetpack joyride)
• Gestion / action (Clash of clan, tower defense)
• Puzzle games (candy crush)
• Cartes / casino
• Mix de tout ça et autres ...
Réalisation du projet
Je suis motivé, j'ai du temps, je souhaite me lancer dans
la réalisation d’un jeu mobile ...
Comment faire ?
Trouver une idée
Originale ...
• Avoir un concept de base amusant et ajouter des éléments autour
… ou inspirée
• Reprendre un concept existant (vieux jeu pc, jeu d’une autre
plateforme, actualité, ...)
=> Dans tous les cas, choisir un élément démarquant.
Exemple de flappy bird :
• Gameplay limité, concept très classique, son élément démarquant est
une difficulté exagérément haute.
Trouver une idée
Pour un premier projet, éviter de :
• Partir sur un projet de trop grande envergure.
o Risque de perte de motivation plus important
o Moins de chance de le sortir
• Mettre la barre trop haut techniquement
o Privilégier la 2D à la 3D
o Sortir un jeu solo plutôt que multijoueur
Tester son idée
• Faire un storyboard
• Lister les points clés du gameplay
• Chercher des jeux similaires sur les stores
• Réfléchir à la monétisation
• Présenter le concept à des tiers, recueillir des retours.
Avoir une équipe
Rôles à remplir
• Manager (Chef produit, marketing, chef de projet)
• Game designer (level design, son, ergonome, design)
• Graphiste (Graphiste 2d, modeleur et textureur 3d)
• Techno (Dev Moteur physique, gameplay, IA, réseau, ... )
Conseils
• Etre à plusieurs permet de compenser les baisses de motivations.
• Partir du principe que le jeu aura du succès: décider dès le début
comment les gains sont répartis dans l’équipe.
Réalisation : Composition d’un jeu
• Logique du jeu (règles, moteur physique, …)
• Moteur de rendu graphique (canvas, opengl, …)
• Ressources (textures, son, textes, localisation ...)
• Gestion des entrées utilisateur (touche écran,
gyroscope, ...)
• IA
• Stockage sur le device( sauvegardes, ...)
• Communication réseau
• Intégration api externes (pub, achat inapp, réseaux
Réalisation : Moteur
Un choix important s’impose dès le début du projet :
L’utilisation ou non d’un moteur de jeu.
Réalisation : Moteur
Pour :
• Réaliser des trucs “cool” plus simplement
• Code du moteur testé et de haute qualité
• On se concentre davantage sur son jeu que sur l’aspect technique
• Des exemples clé en main, communauté.
Contre :
• Peut être dur de sortir du cadre du moteur : risque de jeu “clone”
• On développe des compétences spécifiques au moteur et pas forcément
utiles ou valorisables ailleurs
• Ne convient pas à tout type de jeu
Box 2D
• Moteur physique uniquement
• Implémentation java et native
• Gestion des collisions
• Gestion de formes complexes (cercles et polygones)
• Gestion des forces (gravité, friction, spin, …)
Utilisé pour : angry birds
Chipmunk2D
• Moteur physique uniquement
• Utilisé par le moteur iOS coco2d
• Codé en c : pas compatible android SDK
• Intégration android plus compliquée (NDK)
• Globalement même fonctionnalités que Box2d
• Plus optimisé pour objets de même taille
• Version gratuite et Pro
Unity 2d/3d
• Solution intégrée à 100%
• Licence gratuite (si revenus < 100K$ annuel)
• Large compatibilité (Android, iOS, WP8, ...)
• Grosse communauté
• Mieux adapté à la 3D (a suivre version 4.3)
• Langage propriétaire ou C#/JS
• Mais ... on développe des compétences Unity
uniquement
Utilisé pour : Dead trigger 2
LibGDX
• Api java (ou autre langage JVM) multi plateforme
• Gère l’affichage, l’audio, les contrôles, le stockage.
• Pas d’IDE dédié, intégration à éclipse.
• Extension pour moteur physique (box2d natif)
• Compatible 3D
• Moteur d'exécution desktop
• Beaucoup d’exemples disponibles
AndEngine
• Framework java opensource
• Surcouche opengl
• Intégration du moteur physique box2d (natif ou jar)
• Pas de 3D
• On conserve la main sur le code
• Android only
• moins complet que libGDX mais plus facile à prendre
en main
Réalisation : Moteur
Choisir un moteur pour :
• Faire un test, sans vouloir trop s'investir et avoir un bon résultat
• Aller plus loin sur un projet commencé en POC sans moteur.
• Réaliser un jeu multi plateforme
• Réaliser un jeu 2D/3D sans expérience
Faire tout à la main si :
• Le jeu est non graphique
• Le jeu possède des contraintes spécifiques non adaptées au moteur
• L’on souhaite monter en compétence techniquement et qu’on est prêt à
en baver.
Réalisation : retour d’xp
Motivation pour faire Space Corsair sans moteur
• Monter en compétence sur OpenGL.
• Les moteur physiques ne gèrent pas bien les collisions avec plus de
400/500 objets ce qui pouvait être mon cas dans le gamedesign prévu.
• Savoir faire soi-même pour mieux comprendre le moteur ensuite.
Réalisation : Dev
Itération : Temps nécessaire pour dessiner la scène du jeu et calculer les
éléments de la scène suivante.
Objectif : Faire tenir une itération entre 20 et 30 millisecondes.
Plusieurs thread :
• Thread opengl
• Thread physique / logique du jeu
• Thread de l’activity (reçoit les input)
• Thread musique et son
Thread graphique
Possède sa propre liste d’éléments à afficher
Algo :
• Attendre d’avoir une nouvelle liste d’éléments à afficher
• Afficher chaque élément de la liste via des appels openGL
Réalisation : Dev
Thread physique
Possède une liste des éléments du niveau en cours (joueur, astéroïdes,
ennemis, …)
Algo simplifié V1 :
• Déterminer combien de ms depuis ma dernière exécution
• Appliquer à chacun de mes objets son mouvement en fonction des ms
• Gérer les collisions entre objets
• Ajouter l'objet à la file des éléments à dessiner
Réalisation : Dev
Réalisation : Dev
Chaque objet du jeu est un objet java qui étend d’une classe commune
“Element”. Cette classe contient des paramètres qui permettent de gérer
sa physique, affichage, l’ia.
• Drawable (Objet qui contient les infos opengl pour se dessiner)
• Puissance de poussée
• Vecteur vitesse actuel
• Masse
• Dimension
• Vie
• Visible sur le radar oui/non
Un Element contient aussi des méthodes utilisées pour l’affichage ou la
logique de jeu :
• doPhysic(long elapsed)
• public void registerYourselfToDrawQueue() {
• public void applyMovement(long elapsed)
• public void applyAcceleration(long elapsed)
• estimateFurutrePosition(long futureInMs)
• testColide(Element otherElement)
• applyDamage(float dmge, Element damageSource, Projectile projectile)
• public void onDestroyed(boolean playerLootCompatible)
Réalisation : Dev
• Exemple de la méthode pour appliquer le mouvement
Réalisation : Dev
public void applyMovement(long elapsed) {
this.position.x += this.speed.x * elapsed / 10;
this.position.y += this.speed.y * elapsed / 10;
this.spin += spinSpeed * elapsed / 10;
}
Communication inter-thread : permettre au moteur de modifier les objets pendant
que le thread graphique les affiche
Réalisation : Dev
Utilisation de deux listes d’objets
Une liste A d'éléments à dessiner en ce moment :
● ne change pas pendant l'itération, destiné au thread d'affichage
Une liste B d'élément à dessiner à la prochaine itération :
● vide au début et se remplit avec la progression du thread physique
A la fin d'une itération, on inverse les deux listes, B devient A, et A est vidé et sert a
préparer les éléments N+1
Thread physique
Algo simplifié V2 :
• Déterminer combien de ms depuis ma dernière exécution
• Déterminer la position de la caméra
• Appliquer à chacun de mes objets son mouvement en fonction des ms
• Si objet visible, ajouter l'objet à la file des éléments à dessiner
• Gérer les collisions entre objets
• Si le temps d’exécution < 16 ms (60 FPS), se mettre en “pause” le temps
d’atteindre 16 ms.
Réalisation : Dev
Gestion des inputs
les inputs ne doivent pas accéder au thread physique “en direct”.
• Risque de modification concurrente : les input viennent de
l'activité/view qui n'est pas le même thread que celui qui exécute le
moteur.
Utiliser à la place une file d’attente d’évènement utilisateur à prendre en
compte
• Le thread physique décide quand traiter les derniers traitements depuis
sa dernière exécution .
Réalisation : Dev
Thread physique
Algo simplifié V3 :
• Déterminer combien de ms depuis ma dernière exécution
• Déterminer la position de la caméra
• Appliquer à chacun de mes objets son mouvement en fonction des ms
• Si objet visible, ajouter l'objet à la file des éléments à dessiner
• Gérer les collisions entre objets ( on en parlera plus tard)
• Gérer les input utilisateur (touch, move, gyro, …)
• Si le temps d’exécution < 16 ms (60 FPS), se mettre en “pause” le temps
d’atteindre 16 ms.
Réalisation : Dev
Gestion des collisions
• Brute force
• Découpage en grille
• Sweep and Prune
Réalisation : Dev
• Simple
• Ne permet pas de gérer beaucoup d’objets
Brute force
Réalisation : Dev
for (int i = 0 ; i < elementSize-1; i++){
for (int y = i+1; y < elementSize ; y++){
detectionCollision(elements.get(i),elements.get(y));
}
}
Découpe en grille
Réalisation : Dev
● Plus efficace que le brute force
● Bien choisir sa taille de carré
Optimisation : QuadTree
Sweep and prune
Réalisation : Dev
● Phase 1 : Sweep
Extrait des paires d’objet
potentiellement en collision.
● Phase 2 : Prune
On effectue le test de collision
complet sur les paires.
Intégrer des missions
Utilisation d’interfaces, chaque mission doit fournir une implémentation
que contient la logique de la mission.
Réalisation : Dev
public abstract class MissionListener {
public abstract void onElementDestroyedByPlayer(Element element);
public abstract void onPlayerDeath();
// trigger every 10 sec
public abstract void onEveryTenGameSec();
}
Exemple de mission
Détruire x objets d’un même type (ennemis, astéroides, …)
Réalisation : Dev
@Override
public void onElementDestroyedByPlayer(Element element) {
if ( elementToDestroy.isInstance(element) && !completed) {
remainingElementToDestroy--;
if (remainingElementToDestroy <= 0) {
completed = true;
currentPhase = Phase.GATHER_RECOMP;
}
}
}
Gestion de la musique
Utilisation de la classe MediaPlayer
Réalisation : Dev
MediaPlayer levelMusic = MediaPlayer.create(context, R.raw.space1);
levelMusic.setLooping(true);
levelMusic.start;
●
● Lit la plupart des formats audio. Format Ogg bon compromis entre
performance et qualité.
● Créer un thread dédié pour le mediaplayer évite des problèmes
Effets sonores
Utilisation de la classe SoundPools
Réalisation : Dev
// chargement
private int[] soundPoolIndex = new int[30];
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 100);
int laserSoundIndex = soundPool.load(context, R.raw.laser11, 1);
// utilisation
soundPool.play(laserSoundIndex, volume, volume, 1, 0, 1f);
Optimisations
• Limiter au maximum la création d’objets après le chargement du jeu.
o Utilisation de pool d’objets
o Un objet à retirer de la scène retourne dans le pool.
Réalisation : Dev
public static RubyAsteroid newRubyAsteroid() {
RubyAsteroid rubyAsteroid = GamePools.rubyAsteroidPool.getObject();
if (rubyAsteroid == null) {
rubyAsteroid = new RubyAsteroid();
rubyAsteroid.myPool = GamePools.rubyAsteroidPool;
}
return rubyAsteroid;
}
Optimisations
• Ne pas utiliser de boucle de type foreach
• Utiliser les types primitifs au maximum, ne pas faire d’autoboxing.
• Limiter les appels de méthode
o Remplacer les getter setter par des champs pubic
Réalisation : Dev
Localisation
• Supporter au minimum l’anglais
• Idéalement : koréen, japonais, russe
• Penser aux images
• Texte du play store (très important)
Réalisation : Dev
Sécuriser son code
• Utiliser un obfuscateur (proguard)
• Ne pas laisser de chaînes de caractères sensibles dans le code
• Retirer les logs
Réalisation : Dev
Courbe de motivation
Réalisation
Utiliser les fonctionnalités beta du play store
• Basé sur les communauté G+
• Permet d’inviter des personnes à tester son jeu depuis le store
• Attention notes et commentaires actifs.
Beta
Eléments à intégrer pour une béta
• Un message qui alerte que le jeu est en béta
• Formulaire de contact / fonction d’email au dev
• Librairie de gestion d’erreur
o ACRA (Application Crash Report for Android)
o Crashlytics
• Google analytics
Beta
Différents modèles
• Payant
• Gratuit avec pub
• Freemium (gratuit et inapp premium upgrade)
• Vente de code source
• Partenariat
• Dons
• Vente de stats
Monétiser son app
Types de publicité
• Bannière
• Interstitiel (le plus rentable)
• Vidéo
• Pub géolocalisée
• Cross promotion network
Utiliser un “ad network” : admob, appBrain, greyStrike, ...
Monétiser son app
Achat inapp
• Différents types (Upgrade, Consommable, Monnaie virtuelle)
• Doit être codé pour chaque app store
• Plus compliqué à intégrer proprement que la pub
• Commission des stores de 30%
• Adapter les prix en fonction du pays
• Avantage des gifts code
Monétiser son app
Modèle freemium
• 90% des joueurs n’achèteront rien
o Mais les notes positives de ceux-ci font venir les 10% restants
• 50% des revenus de jeux viennent de 0.15% des joueurs
• Modèle le plus rentable
Monétiser son app
Principaux stores
• Google play store
• Amazon app store
• Opera mobile store
• Samsung apps mobile
• …
Publier son app
• Localiser la description dans les stores
• Publier plus tôt sans forcément avoir toutes les features
• Choisir sa date de sortie : idéalement un vendredi
• Ajouter un lien pour noter son app
• Ajouter un changelog
Publier son app
• Faire une vidéo
o Genymotion + capture vidéo
• Préparer un dossier de presse
o Présentation de l’équipe
o Date de lancement
o Point discriminent de l’app
o Screenshot/vidéos
o Statistiques
• Avoir un article dans les site de niche
Promouvoir son app
Promouvoir son app
• Ajouter une dimension sociale
o facebook api
o google play game services
• Présentation dans les forums, réseaux sociaux
• Campagne de pub
o Optimiser le nombre de week end
o Ne promouvoir que les pays dont l’app est localisée
• Classement (quotidien, hebdo, mensuel, …)
• Succès
• Multijoueur (mise en relation)
• Stockage en ligne de backup
• Les joueurs se connectent avec un compte g+
Google Play Games Services
• Surveiller les bugs et les corriger
• Répondre aux mails des joueurs
• Répondre aux commentaires sur les stores
• Orienter ses futures mises à jour en fonction des retours des joueurs.
• Faire des mises à jour régulières
Après la sortie

Contenu connexe

Tendances

Processus et économie du Jeu Vidéo
Processus et économie du Jeu VidéoProcessus et économie du Jeu Vidéo
Processus et économie du Jeu Vidéo
snatkin
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contact
Jasmine Conseil
 
Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)
G²FOSS ENIT
 
Présentation et Initiative pour le développement Android
Présentation et Initiative pour le développement AndroidPrésentation et Initiative pour le développement Android
Présentation et Initiative pour le développement Android
younes ben tlili
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
Olivier Le Goaër
 
Développer avec Visual Studio et TFS 2012 ses applications Windows Store
Développer avec Visual Studio et TFS 2012 ses applications Windows StoreDévelopper avec Visual Studio et TFS 2012 ses applications Windows Store
Développer avec Visual Studio et TFS 2012 ses applications Windows Store
Microsoft
 
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLabCocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
CocoaHeads France
 
Jembe unity3d
Jembe unity3dJembe unity3d
Jembe unity3dBeMyApp
 
Bootcamp d'Initiation à Android - 2013/11/30
Bootcamp d'Initiation à Android  - 2013/11/30Bootcamp d'Initiation à Android  - 2013/11/30
Bootcamp d'Initiation à Android - 2013/11/30
Horacio Gonzalez
 
Unity 3D : découverte de l&rsquo;écosystème
Unity 3D : découverte de l&rsquo;écosystème Unity 3D : découverte de l&rsquo;écosystème
Unity 3D : découverte de l&rsquo;écosystème
Microsoft
 
Initiation Android Niveau Débutant
Initiation Android Niveau DébutantInitiation Android Niveau Débutant
Initiation Android Niveau Débutant
Nadim GOUIA
 
AR / VR / XR dans les navigateurs
AR / VR / XR dans les navigateursAR / VR / XR dans les navigateurs
AR / VR / XR dans les navigateurs
Christophe Villeneuve
 
GDG Rennes - Bootcamp Initiation Android - Théorie
GDG Rennes - Bootcamp Initiation Android -  ThéorieGDG Rennes - Bootcamp Initiation Android -  Théorie
GDG Rennes - Bootcamp Initiation Android - Théorie
Horacio Gonzalez
 
Tech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesTech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobiles
Michael Laguerre
 
HTML5, JavaScript et CSS3: Concevoir des interfaces tactiles à destination de...
HTML5, JavaScript et CSS3: Concevoir des interfaces tactiles à destination de...HTML5, JavaScript et CSS3: Concevoir des interfaces tactiles à destination de...
HTML5, JavaScript et CSS3: Concevoir des interfaces tactiles à destination de...
Microsoft
 
Booster votre application Windows Phone 8
Booster votre application Windows Phone 8Booster votre application Windows Phone 8
Booster votre application Windows Phone 8
Microsoft
 
Introduction au développement Android
Introduction au développement AndroidIntroduction au développement Android
Introduction au développement AndroidSteve Tremblay
 
Présentation meetup unity
Présentation meetup unityPrésentation meetup unity
Présentation meetup unityBeMyApp
 

Tendances (19)

Processus et économie du Jeu Vidéo
Processus et économie du Jeu VidéoProcessus et économie du Jeu Vidéo
Processus et économie du Jeu Vidéo
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contact
 
Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)
 
Présentation et Initiative pour le développement Android
Présentation et Initiative pour le développement AndroidPrésentation et Initiative pour le développement Android
Présentation et Initiative pour le développement Android
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
 
Développer avec Visual Studio et TFS 2012 ses applications Windows Store
Développer avec Visual Studio et TFS 2012 ses applications Windows StoreDévelopper avec Visual Studio et TFS 2012 ses applications Windows Store
Développer avec Visual Studio et TFS 2012 ses applications Windows Store
 
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLabCocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
CocoaHeads Toulouse - Présentation Windows Phone 7 - ClevLab
 
Jembe unity3d
Jembe unity3dJembe unity3d
Jembe unity3d
 
Bootcamp d'Initiation à Android - 2013/11/30
Bootcamp d'Initiation à Android  - 2013/11/30Bootcamp d'Initiation à Android  - 2013/11/30
Bootcamp d'Initiation à Android - 2013/11/30
 
Unity 3D : découverte de l&rsquo;écosystème
Unity 3D : découverte de l&rsquo;écosystème Unity 3D : découverte de l&rsquo;écosystème
Unity 3D : découverte de l&rsquo;écosystème
 
Initiation Android Niveau Débutant
Initiation Android Niveau DébutantInitiation Android Niveau Débutant
Initiation Android Niveau Débutant
 
AR / VR / XR dans les navigateurs
AR / VR / XR dans les navigateursAR / VR / XR dans les navigateurs
AR / VR / XR dans les navigateurs
 
GDG Rennes - Bootcamp Initiation Android - Théorie
GDG Rennes - Bootcamp Initiation Android -  ThéorieGDG Rennes - Bootcamp Initiation Android -  Théorie
GDG Rennes - Bootcamp Initiation Android - Théorie
 
Tech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesTech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobiles
 
HTML5, JavaScript et CSS3: Concevoir des interfaces tactiles à destination de...
HTML5, JavaScript et CSS3: Concevoir des interfaces tactiles à destination de...HTML5, JavaScript et CSS3: Concevoir des interfaces tactiles à destination de...
HTML5, JavaScript et CSS3: Concevoir des interfaces tactiles à destination de...
 
Booster votre application Windows Phone 8
Booster votre application Windows Phone 8Booster votre application Windows Phone 8
Booster votre application Windows Phone 8
 
Introduction au développement Android
Introduction au développement AndroidIntroduction au développement Android
Introduction au développement Android
 
Présentation meetup unity
Présentation meetup unityPrésentation meetup unity
Présentation meetup unity
 
Meetup sencha
Meetup senchaMeetup sencha
Meetup sencha
 

En vedette

Yakari en illimité sur Tiny Kids!
Yakari en illimité sur Tiny Kids!Yakari en illimité sur Tiny Kids!
Yakari en illimité sur Tiny Kids!
Tiny Kids
 
Les attaques par injection sql
Les attaques par injection sqlLes attaques par injection sql
Les attaques par injection sql
Mohamed Yassin
 
Types of sql injection attacks
Types of sql injection attacksTypes of sql injection attacks
Types of sql injection attacks
Respa Peter
 
Ppt on sql injection
Ppt on sql injectionPpt on sql injection
Ppt on sql injection
ashish20012
 
SQL Injection
SQL Injection SQL Injection
SQL Injection
Adhoura Academy
 
Sql Injection attacks and prevention
Sql Injection attacks and preventionSql Injection attacks and prevention
Sql Injection attacks and prevention
helloanand
 
C omp utraining replay
C omp utraining replayC omp utraining replay
C omp utraining replayAmelie Marcaud
 
Une meilleure relation clients comme solution anti-crise
Une meilleure relation clients comme solution anti-criseUne meilleure relation clients comme solution anti-crise
Une meilleure relation clients comme solution anti-crise
Jean-Claude MORAND
 
Humoristas plaza de arma
Humoristas plaza de armaHumoristas plaza de arma
Humoristas plaza de arma
Jose Rojas Diaz
 
Spiritualite indienne
Spiritualite indienne Spiritualite indienne
Spiritualite indienne Josee Andree
 
Poker de 3 Cartas Juego
Poker de 3 Cartas JuegoPoker de 3 Cartas Juego
Poker de 3 Cartas Juego
Jugar Con Juegos
 
Aire y cielos de asturias nº1
Aire y cielos de asturias nº1Aire y cielos de asturias nº1
Aire y cielos de asturias nº1
marcos diaz
 
Martín luther king
Martín luther kingMartín luther king
Martín luther king
Sofia Ignacia
 
Seo campus Franck NLEMBA
Seo campus Franck NLEMBASeo campus Franck NLEMBA
Seo campus Franck NLEMBA
Franck NLEMBA
 
Nueve cartas a angel
Nueve cartas a angelNueve cartas a angel
Nueve cartas a angel
Luis Bados Ramirez
 
thalasso cabourg
thalasso cabourgthalasso cabourg
thalasso cabourg
thermalisme
 
Action contre la Faim
Action contre la FaimAction contre la Faim
Action contre la Faim
cheeseisdisgusting
 
Instalación nod32 para windows de 32 bits
Instalación nod32 para windows de 32 bitsInstalación nod32 para windows de 32 bits
Instalación nod32 para windows de 32 bits
IPAE
 
Sistemas de ecuaciones de 2 x 2
Sistemas de ecuaciones de  2 x 2Sistemas de ecuaciones de  2 x 2
Sistemas de ecuaciones de 2 x 2
andredorado
 

En vedette (20)

Yakari en illimité sur Tiny Kids!
Yakari en illimité sur Tiny Kids!Yakari en illimité sur Tiny Kids!
Yakari en illimité sur Tiny Kids!
 
Les attaques par injection sql
Les attaques par injection sqlLes attaques par injection sql
Les attaques par injection sql
 
Types of sql injection attacks
Types of sql injection attacksTypes of sql injection attacks
Types of sql injection attacks
 
Ppt on sql injection
Ppt on sql injectionPpt on sql injection
Ppt on sql injection
 
SQL Injection
SQL Injection SQL Injection
SQL Injection
 
Sql Injection attacks and prevention
Sql Injection attacks and preventionSql Injection attacks and prevention
Sql Injection attacks and prevention
 
C omp utraining replay
C omp utraining replayC omp utraining replay
C omp utraining replay
 
Une meilleure relation clients comme solution anti-crise
Une meilleure relation clients comme solution anti-criseUne meilleure relation clients comme solution anti-crise
Une meilleure relation clients comme solution anti-crise
 
Humoristas plaza de arma
Humoristas plaza de armaHumoristas plaza de arma
Humoristas plaza de arma
 
Spiritualite indienne
Spiritualite indienne Spiritualite indienne
Spiritualite indienne
 
Poker de 3 Cartas Juego
Poker de 3 Cartas JuegoPoker de 3 Cartas Juego
Poker de 3 Cartas Juego
 
Aire y cielos de asturias nº1
Aire y cielos de asturias nº1Aire y cielos de asturias nº1
Aire y cielos de asturias nº1
 
Martín luther king
Martín luther kingMartín luther king
Martín luther king
 
Seo campus Franck NLEMBA
Seo campus Franck NLEMBASeo campus Franck NLEMBA
Seo campus Franck NLEMBA
 
Nueve cartas a angel
Nueve cartas a angelNueve cartas a angel
Nueve cartas a angel
 
thalasso cabourg
thalasso cabourgthalasso cabourg
thalasso cabourg
 
Action contre la Faim
Action contre la FaimAction contre la Faim
Action contre la Faim
 
Instalación nod32 para windows de 32 bits
Instalación nod32 para windows de 32 bitsInstalación nod32 para windows de 32 bits
Instalación nod32 para windows de 32 bits
 
Sistemas de ecuaciones de 2 x 2
Sistemas de ecuaciones de  2 x 2Sistemas de ecuaciones de  2 x 2
Sistemas de ecuaciones de 2 x 2
 
I phonographie2
I phonographie2I phonographie2
I phonographie2
 

Similaire à Retour d'expérience développement jeux android

Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018
Yannick Comte
 
Godot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutantGodot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutant
Antho Cardinale
 
Réalité virtuelle + Open source = &lt;3
Réalité virtuelle + Open source = &lt;3Réalité virtuelle + Open source = &lt;3
Réalité virtuelle + Open source = &lt;3
Yannick Comte
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Jean Gabès
 
Presentation Brutal Donut par Julien PATTE
Presentation Brutal Donut par Julien PATTEPresentation Brutal Donut par Julien PATTE
Presentation Brutal Donut par Julien PATTE
BeMyApp
 
NodeJs in real life
NodeJs in real lifeNodeJs in real life
NodeJs in real life
Willy Leloutre
 
Porte feuilles-perso
Porte feuilles-persoPorte feuilles-perso
Porte feuilles-persoymoumen
 
Algeria Game Dev Fest - Game Dev : Concepts et techniques
Algeria Game Dev Fest - Game Dev : Concepts et techniquesAlgeria Game Dev Fest - Game Dev : Concepts et techniques
Algeria Game Dev Fest - Game Dev : Concepts et techniques
OverGen
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyonClement Bouillier
 
Kinect pour les développeurs Web
Kinect pour les développeurs WebKinect pour les développeurs Web
Kinect pour les développeurs Web
ekino
 
Creation de jeux en ligne suib-i.com
Creation de jeux en ligne suib-i.comCreation de jeux en ligne suib-i.com
Creation de jeux en ligne suib-i.compierota
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
Guillaume Collic
 
Réalité virtuelle sur Android, entre Cardboard et GearVR
Réalité virtuelle sur Android, entre Cardboard et GearVRRéalité virtuelle sur Android, entre Cardboard et GearVR
Réalité virtuelle sur Android, entre Cardboard et GearVR
Julien Salvi
 
Optimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJSOptimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJS
Microsoft
 
Kinect pour les développeurs Web
Kinect pour les développeurs WebKinect pour les développeurs Web
Kinect pour les développeurs Web
Mickael Dumand
 
Distribution décentralisé d'assets numériques dans le jeu vidéo
Distribution décentralisé d'assets numériques dans le jeu vidéoDistribution décentralisé d'assets numériques dans le jeu vidéo
Distribution décentralisé d'assets numériques dans le jeu vidéo
joul1285
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8
Microsoft
 
Cecyf / Coriin - mimikatz et la mémoire de Windows
Cecyf / Coriin - mimikatz et la mémoire de WindowsCecyf / Coriin - mimikatz et la mémoire de Windows
Cecyf / Coriin - mimikatz et la mémoire de Windows
Benjamin Delpy
 
Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011jimmybourassa
 

Similaire à Retour d'expérience développement jeux android (20)

Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018
 
Mgd unity interface
Mgd unity interfaceMgd unity interface
Mgd unity interface
 
Godot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutantGodot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutant
 
Réalité virtuelle + Open source = &lt;3
Réalité virtuelle + Open source = &lt;3Réalité virtuelle + Open source = &lt;3
Réalité virtuelle + Open source = &lt;3
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)
 
Presentation Brutal Donut par Julien PATTE
Presentation Brutal Donut par Julien PATTEPresentation Brutal Donut par Julien PATTE
Presentation Brutal Donut par Julien PATTE
 
NodeJs in real life
NodeJs in real lifeNodeJs in real life
NodeJs in real life
 
Porte feuilles-perso
Porte feuilles-persoPorte feuilles-perso
Porte feuilles-perso
 
Algeria Game Dev Fest - Game Dev : Concepts et techniques
Algeria Game Dev Fest - Game Dev : Concepts et techniquesAlgeria Game Dev Fest - Game Dev : Concepts et techniques
Algeria Game Dev Fest - Game Dev : Concepts et techniques
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
Kinect pour les développeurs Web
Kinect pour les développeurs WebKinect pour les développeurs Web
Kinect pour les développeurs Web
 
Creation de jeux en ligne suib-i.com
Creation de jeux en ligne suib-i.comCreation de jeux en ligne suib-i.com
Creation de jeux en ligne suib-i.com
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Réalité virtuelle sur Android, entre Cardboard et GearVR
Réalité virtuelle sur Android, entre Cardboard et GearVRRéalité virtuelle sur Android, entre Cardboard et GearVR
Réalité virtuelle sur Android, entre Cardboard et GearVR
 
Optimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJSOptimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJS
 
Kinect pour les développeurs Web
Kinect pour les développeurs WebKinect pour les développeurs Web
Kinect pour les développeurs Web
 
Distribution décentralisé d'assets numériques dans le jeu vidéo
Distribution décentralisé d'assets numériques dans le jeu vidéoDistribution décentralisé d'assets numériques dans le jeu vidéo
Distribution décentralisé d'assets numériques dans le jeu vidéo
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8
 
Cecyf / Coriin - mimikatz et la mémoire de Windows
Cecyf / Coriin - mimikatz et la mémoire de WindowsCecyf / Coriin - mimikatz et la mémoire de Windows
Cecyf / Coriin - mimikatz et la mémoire de Windows
 
Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011
 

Dernier

Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
Newsletter SPW Agriculture en province du Luxembourg du 12-06-24Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
BenotGeorges3
 
Formation Intelligence Artificielle pour dirigeants- IT6-DIGITALIX 24_opt OK_...
Formation Intelligence Artificielle pour dirigeants- IT6-DIGITALIX 24_opt OK_...Formation Intelligence Artificielle pour dirigeants- IT6-DIGITALIX 24_opt OK_...
Formation Intelligence Artificielle pour dirigeants- IT6-DIGITALIX 24_opt OK_...
cristionobedi
 
Iris van Herpen. pptx
Iris         van         Herpen.      pptxIris         van         Herpen.      pptx
Iris van Herpen. pptx
Txaruka
 
Cycle de Formation Théâtrale 2024 / 2025
Cycle de Formation Théâtrale 2024 / 2025Cycle de Formation Théâtrale 2024 / 2025
Cycle de Formation Théâtrale 2024 / 2025
Billy DEYLORD
 
Iris van Herpen. pptx
Iris            van        Herpen.     pptxIris            van        Herpen.     pptx
Iris van Herpen. pptx
Txaruka
 
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
M2i Formation
 
Burkina Faso library newsletter May 2024
Burkina Faso library newsletter May 2024Burkina Faso library newsletter May 2024
Burkina Faso library newsletter May 2024
Friends of African Village Libraries
 
Iris van Herpen. pptx
Iris         van        Herpen.      pptxIris         van        Herpen.      pptx
Iris van Herpen. pptx
Txaruka
 

Dernier (8)

Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
Newsletter SPW Agriculture en province du Luxembourg du 12-06-24Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
 
Formation Intelligence Artificielle pour dirigeants- IT6-DIGITALIX 24_opt OK_...
Formation Intelligence Artificielle pour dirigeants- IT6-DIGITALIX 24_opt OK_...Formation Intelligence Artificielle pour dirigeants- IT6-DIGITALIX 24_opt OK_...
Formation Intelligence Artificielle pour dirigeants- IT6-DIGITALIX 24_opt OK_...
 
Iris van Herpen. pptx
Iris         van         Herpen.      pptxIris         van         Herpen.      pptx
Iris van Herpen. pptx
 
Cycle de Formation Théâtrale 2024 / 2025
Cycle de Formation Théâtrale 2024 / 2025Cycle de Formation Théâtrale 2024 / 2025
Cycle de Formation Théâtrale 2024 / 2025
 
Iris van Herpen. pptx
Iris            van        Herpen.     pptxIris            van        Herpen.     pptx
Iris van Herpen. pptx
 
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
 
Burkina Faso library newsletter May 2024
Burkina Faso library newsletter May 2024Burkina Faso library newsletter May 2024
Burkina Faso library newsletter May 2024
 
Iris van Herpen. pptx
Iris         van        Herpen.      pptxIris         van        Herpen.      pptx
Iris van Herpen. pptx
 

Retour d'expérience développement jeux android

  • 2. Lead developper plateforme cloud mobile chez Sage Développeur de Space Corsair
  • 3. • Introduction au développement mobile • Comment développer son premier jeu • Monétiser son projet • Conseils pour réussir sa sortie Plan de la présentation
  • 4. Statistiques sur le jeu vidéo mobile • Un marché estimé à 22 Milliards de $ en 2015 • 80% des revenus mobile viennent des jeux • En 2012, les 25 premiers développeurs prennent à eux seuls 50% des revenus. • Dépense moyenne de 21$ par joueur en 2011 • 80 % des développeurs mobile ne gagnent pas assez pour en faire une activité principale.
  • 5. Pourquoi développer son jeu? • Apprendre, développer ses compétences • Ajouter une expérience sur son CV • Revenus complémentaires • S’évader des contraintes de son emploi principal • Sortie sur le marché d’un vrai produit ( préparation marketing, publicité)
  • 6. Dur développer un jeu? On peut faire un jeu à succès en utilisant uniquement les composants d’une application Android non ludique (quizz , jeu de gestion). La complexité dépend du type de jeu et de son expérience en développement, l’important c’est de choisir un projet à sa portée.
  • 7. Différents types de jeux mobiles • 3D / simulation (Asphalt) • 2D / action rpg ( Space corsair) • Réflexion / physique (angry birds, cut the rope) • 2D scrolling ( jetpack joyride) • Gestion / action (Clash of clan, tower defense) • Puzzle games (candy crush) • Cartes / casino • Mix de tout ça et autres ...
  • 8. Réalisation du projet Je suis motivé, j'ai du temps, je souhaite me lancer dans la réalisation d’un jeu mobile ... Comment faire ?
  • 9. Trouver une idée Originale ... • Avoir un concept de base amusant et ajouter des éléments autour … ou inspirée • Reprendre un concept existant (vieux jeu pc, jeu d’une autre plateforme, actualité, ...) => Dans tous les cas, choisir un élément démarquant. Exemple de flappy bird : • Gameplay limité, concept très classique, son élément démarquant est une difficulté exagérément haute.
  • 10. Trouver une idée Pour un premier projet, éviter de : • Partir sur un projet de trop grande envergure. o Risque de perte de motivation plus important o Moins de chance de le sortir • Mettre la barre trop haut techniquement o Privilégier la 2D à la 3D o Sortir un jeu solo plutôt que multijoueur
  • 11. Tester son idée • Faire un storyboard • Lister les points clés du gameplay • Chercher des jeux similaires sur les stores • Réfléchir à la monétisation • Présenter le concept à des tiers, recueillir des retours.
  • 12. Avoir une équipe Rôles à remplir • Manager (Chef produit, marketing, chef de projet) • Game designer (level design, son, ergonome, design) • Graphiste (Graphiste 2d, modeleur et textureur 3d) • Techno (Dev Moteur physique, gameplay, IA, réseau, ... ) Conseils • Etre à plusieurs permet de compenser les baisses de motivations. • Partir du principe que le jeu aura du succès: décider dès le début comment les gains sont répartis dans l’équipe.
  • 13. Réalisation : Composition d’un jeu • Logique du jeu (règles, moteur physique, …) • Moteur de rendu graphique (canvas, opengl, …) • Ressources (textures, son, textes, localisation ...) • Gestion des entrées utilisateur (touche écran, gyroscope, ...) • IA • Stockage sur le device( sauvegardes, ...) • Communication réseau • Intégration api externes (pub, achat inapp, réseaux
  • 14. Réalisation : Moteur Un choix important s’impose dès le début du projet : L’utilisation ou non d’un moteur de jeu.
  • 15. Réalisation : Moteur Pour : • Réaliser des trucs “cool” plus simplement • Code du moteur testé et de haute qualité • On se concentre davantage sur son jeu que sur l’aspect technique • Des exemples clé en main, communauté. Contre : • Peut être dur de sortir du cadre du moteur : risque de jeu “clone” • On développe des compétences spécifiques au moteur et pas forcément utiles ou valorisables ailleurs • Ne convient pas à tout type de jeu
  • 16. Box 2D • Moteur physique uniquement • Implémentation java et native • Gestion des collisions • Gestion de formes complexes (cercles et polygones) • Gestion des forces (gravité, friction, spin, …) Utilisé pour : angry birds
  • 17. Chipmunk2D • Moteur physique uniquement • Utilisé par le moteur iOS coco2d • Codé en c : pas compatible android SDK • Intégration android plus compliquée (NDK) • Globalement même fonctionnalités que Box2d • Plus optimisé pour objets de même taille • Version gratuite et Pro
  • 18. Unity 2d/3d • Solution intégrée à 100% • Licence gratuite (si revenus < 100K$ annuel) • Large compatibilité (Android, iOS, WP8, ...) • Grosse communauté • Mieux adapté à la 3D (a suivre version 4.3) • Langage propriétaire ou C#/JS • Mais ... on développe des compétences Unity uniquement Utilisé pour : Dead trigger 2
  • 19. LibGDX • Api java (ou autre langage JVM) multi plateforme • Gère l’affichage, l’audio, les contrôles, le stockage. • Pas d’IDE dédié, intégration à éclipse. • Extension pour moteur physique (box2d natif) • Compatible 3D • Moteur d'exécution desktop • Beaucoup d’exemples disponibles
  • 20. AndEngine • Framework java opensource • Surcouche opengl • Intégration du moteur physique box2d (natif ou jar) • Pas de 3D • On conserve la main sur le code • Android only • moins complet que libGDX mais plus facile à prendre en main
  • 21. Réalisation : Moteur Choisir un moteur pour : • Faire un test, sans vouloir trop s'investir et avoir un bon résultat • Aller plus loin sur un projet commencé en POC sans moteur. • Réaliser un jeu multi plateforme • Réaliser un jeu 2D/3D sans expérience Faire tout à la main si : • Le jeu est non graphique • Le jeu possède des contraintes spécifiques non adaptées au moteur • L’on souhaite monter en compétence techniquement et qu’on est prêt à en baver.
  • 22. Réalisation : retour d’xp Motivation pour faire Space Corsair sans moteur • Monter en compétence sur OpenGL. • Les moteur physiques ne gèrent pas bien les collisions avec plus de 400/500 objets ce qui pouvait être mon cas dans le gamedesign prévu. • Savoir faire soi-même pour mieux comprendre le moteur ensuite.
  • 23. Réalisation : Dev Itération : Temps nécessaire pour dessiner la scène du jeu et calculer les éléments de la scène suivante. Objectif : Faire tenir une itération entre 20 et 30 millisecondes. Plusieurs thread : • Thread opengl • Thread physique / logique du jeu • Thread de l’activity (reçoit les input) • Thread musique et son
  • 24. Thread graphique Possède sa propre liste d’éléments à afficher Algo : • Attendre d’avoir une nouvelle liste d’éléments à afficher • Afficher chaque élément de la liste via des appels openGL Réalisation : Dev
  • 25. Thread physique Possède une liste des éléments du niveau en cours (joueur, astéroïdes, ennemis, …) Algo simplifié V1 : • Déterminer combien de ms depuis ma dernière exécution • Appliquer à chacun de mes objets son mouvement en fonction des ms • Gérer les collisions entre objets • Ajouter l'objet à la file des éléments à dessiner Réalisation : Dev
  • 26. Réalisation : Dev Chaque objet du jeu est un objet java qui étend d’une classe commune “Element”. Cette classe contient des paramètres qui permettent de gérer sa physique, affichage, l’ia. • Drawable (Objet qui contient les infos opengl pour se dessiner) • Puissance de poussée • Vecteur vitesse actuel • Masse • Dimension • Vie • Visible sur le radar oui/non
  • 27. Un Element contient aussi des méthodes utilisées pour l’affichage ou la logique de jeu : • doPhysic(long elapsed) • public void registerYourselfToDrawQueue() { • public void applyMovement(long elapsed) • public void applyAcceleration(long elapsed) • estimateFurutrePosition(long futureInMs) • testColide(Element otherElement) • applyDamage(float dmge, Element damageSource, Projectile projectile) • public void onDestroyed(boolean playerLootCompatible) Réalisation : Dev
  • 28. • Exemple de la méthode pour appliquer le mouvement Réalisation : Dev public void applyMovement(long elapsed) { this.position.x += this.speed.x * elapsed / 10; this.position.y += this.speed.y * elapsed / 10; this.spin += spinSpeed * elapsed / 10; }
  • 29. Communication inter-thread : permettre au moteur de modifier les objets pendant que le thread graphique les affiche Réalisation : Dev Utilisation de deux listes d’objets Une liste A d'éléments à dessiner en ce moment : ● ne change pas pendant l'itération, destiné au thread d'affichage Une liste B d'élément à dessiner à la prochaine itération : ● vide au début et se remplit avec la progression du thread physique A la fin d'une itération, on inverse les deux listes, B devient A, et A est vidé et sert a préparer les éléments N+1
  • 30. Thread physique Algo simplifié V2 : • Déterminer combien de ms depuis ma dernière exécution • Déterminer la position de la caméra • Appliquer à chacun de mes objets son mouvement en fonction des ms • Si objet visible, ajouter l'objet à la file des éléments à dessiner • Gérer les collisions entre objets • Si le temps d’exécution < 16 ms (60 FPS), se mettre en “pause” le temps d’atteindre 16 ms. Réalisation : Dev
  • 31. Gestion des inputs les inputs ne doivent pas accéder au thread physique “en direct”. • Risque de modification concurrente : les input viennent de l'activité/view qui n'est pas le même thread que celui qui exécute le moteur. Utiliser à la place une file d’attente d’évènement utilisateur à prendre en compte • Le thread physique décide quand traiter les derniers traitements depuis sa dernière exécution . Réalisation : Dev
  • 32. Thread physique Algo simplifié V3 : • Déterminer combien de ms depuis ma dernière exécution • Déterminer la position de la caméra • Appliquer à chacun de mes objets son mouvement en fonction des ms • Si objet visible, ajouter l'objet à la file des éléments à dessiner • Gérer les collisions entre objets ( on en parlera plus tard) • Gérer les input utilisateur (touch, move, gyro, …) • Si le temps d’exécution < 16 ms (60 FPS), se mettre en “pause” le temps d’atteindre 16 ms. Réalisation : Dev
  • 33. Gestion des collisions • Brute force • Découpage en grille • Sweep and Prune Réalisation : Dev
  • 34. • Simple • Ne permet pas de gérer beaucoup d’objets Brute force Réalisation : Dev for (int i = 0 ; i < elementSize-1; i++){ for (int y = i+1; y < elementSize ; y++){ detectionCollision(elements.get(i),elements.get(y)); } }
  • 35. Découpe en grille Réalisation : Dev ● Plus efficace que le brute force ● Bien choisir sa taille de carré Optimisation : QuadTree
  • 36. Sweep and prune Réalisation : Dev ● Phase 1 : Sweep Extrait des paires d’objet potentiellement en collision. ● Phase 2 : Prune On effectue le test de collision complet sur les paires.
  • 37. Intégrer des missions Utilisation d’interfaces, chaque mission doit fournir une implémentation que contient la logique de la mission. Réalisation : Dev public abstract class MissionListener { public abstract void onElementDestroyedByPlayer(Element element); public abstract void onPlayerDeath(); // trigger every 10 sec public abstract void onEveryTenGameSec(); }
  • 38. Exemple de mission Détruire x objets d’un même type (ennemis, astéroides, …) Réalisation : Dev @Override public void onElementDestroyedByPlayer(Element element) { if ( elementToDestroy.isInstance(element) && !completed) { remainingElementToDestroy--; if (remainingElementToDestroy <= 0) { completed = true; currentPhase = Phase.GATHER_RECOMP; } } }
  • 39. Gestion de la musique Utilisation de la classe MediaPlayer Réalisation : Dev MediaPlayer levelMusic = MediaPlayer.create(context, R.raw.space1); levelMusic.setLooping(true); levelMusic.start; ● ● Lit la plupart des formats audio. Format Ogg bon compromis entre performance et qualité. ● Créer un thread dédié pour le mediaplayer évite des problèmes
  • 40. Effets sonores Utilisation de la classe SoundPools Réalisation : Dev // chargement private int[] soundPoolIndex = new int[30]; soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 100); int laserSoundIndex = soundPool.load(context, R.raw.laser11, 1); // utilisation soundPool.play(laserSoundIndex, volume, volume, 1, 0, 1f);
  • 41. Optimisations • Limiter au maximum la création d’objets après le chargement du jeu. o Utilisation de pool d’objets o Un objet à retirer de la scène retourne dans le pool. Réalisation : Dev public static RubyAsteroid newRubyAsteroid() { RubyAsteroid rubyAsteroid = GamePools.rubyAsteroidPool.getObject(); if (rubyAsteroid == null) { rubyAsteroid = new RubyAsteroid(); rubyAsteroid.myPool = GamePools.rubyAsteroidPool; } return rubyAsteroid; }
  • 42. Optimisations • Ne pas utiliser de boucle de type foreach • Utiliser les types primitifs au maximum, ne pas faire d’autoboxing. • Limiter les appels de méthode o Remplacer les getter setter par des champs pubic Réalisation : Dev
  • 43. Localisation • Supporter au minimum l’anglais • Idéalement : koréen, japonais, russe • Penser aux images • Texte du play store (très important) Réalisation : Dev
  • 44. Sécuriser son code • Utiliser un obfuscateur (proguard) • Ne pas laisser de chaînes de caractères sensibles dans le code • Retirer les logs Réalisation : Dev
  • 46. Utiliser les fonctionnalités beta du play store • Basé sur les communauté G+ • Permet d’inviter des personnes à tester son jeu depuis le store • Attention notes et commentaires actifs. Beta
  • 47. Eléments à intégrer pour une béta • Un message qui alerte que le jeu est en béta • Formulaire de contact / fonction d’email au dev • Librairie de gestion d’erreur o ACRA (Application Crash Report for Android) o Crashlytics • Google analytics Beta
  • 48. Différents modèles • Payant • Gratuit avec pub • Freemium (gratuit et inapp premium upgrade) • Vente de code source • Partenariat • Dons • Vente de stats Monétiser son app
  • 49. Types de publicité • Bannière • Interstitiel (le plus rentable) • Vidéo • Pub géolocalisée • Cross promotion network Utiliser un “ad network” : admob, appBrain, greyStrike, ... Monétiser son app
  • 50. Achat inapp • Différents types (Upgrade, Consommable, Monnaie virtuelle) • Doit être codé pour chaque app store • Plus compliqué à intégrer proprement que la pub • Commission des stores de 30% • Adapter les prix en fonction du pays • Avantage des gifts code Monétiser son app
  • 51. Modèle freemium • 90% des joueurs n’achèteront rien o Mais les notes positives de ceux-ci font venir les 10% restants • 50% des revenus de jeux viennent de 0.15% des joueurs • Modèle le plus rentable Monétiser son app
  • 52. Principaux stores • Google play store • Amazon app store • Opera mobile store • Samsung apps mobile • … Publier son app
  • 53. • Localiser la description dans les stores • Publier plus tôt sans forcément avoir toutes les features • Choisir sa date de sortie : idéalement un vendredi • Ajouter un lien pour noter son app • Ajouter un changelog Publier son app
  • 54. • Faire une vidéo o Genymotion + capture vidéo • Préparer un dossier de presse o Présentation de l’équipe o Date de lancement o Point discriminent de l’app o Screenshot/vidéos o Statistiques • Avoir un article dans les site de niche Promouvoir son app
  • 55. Promouvoir son app • Ajouter une dimension sociale o facebook api o google play game services • Présentation dans les forums, réseaux sociaux • Campagne de pub o Optimiser le nombre de week end o Ne promouvoir que les pays dont l’app est localisée
  • 56. • Classement (quotidien, hebdo, mensuel, …) • Succès • Multijoueur (mise en relation) • Stockage en ligne de backup • Les joueurs se connectent avec un compte g+ Google Play Games Services
  • 57. • Surveiller les bugs et les corriger • Répondre aux mails des joueurs • Répondre aux commentaires sur les stores • Orienter ses futures mises à jour en fonction des retours des joueurs. • Faire des mises à jour régulières Après la sortie