10c.1 Une introduction au code Alice - Création d`Applis

Transcription

10c.1 Une introduction au code Alice - Création d`Applis
ZONE D’APPRENTISSAGE DU CODAGE
CHAPITRE 10C APPRENDRE AVEC LE CODE D’ALICE
10c.1 Une introduction au code Alice
Jetez un œil au classement des appli-livres pour téléphone
portable de nos jours : on dirait que les livres interactifs à base
de physique sont partout. Mais lors du démarrage de l’iPad,
il n’y avait qu’une seule appli de ce genre, intitulée Alice for
the iPad (Alice pour l’iPad). Notre équipe, Atomic Antelope,
a créé Alice et nous en avons livré plus d’un demi-million de
copies. Même aujourd’hui, cela reste un des meilleurs exemples
de texte traditionnel transformé en expérience interactive.
Mais ce qui est le plus incroyable, ce qui va vraiment
vous intéresser, c’est que nous avons inclus un véritable
extrait du code source d’Alice dans ce didacticiel. Vous ne
rêvez pas ; vous allez mettre les mains sur le code d’une
appli qui est devenue un véritable bestseller. Le code que
nous allons vous montrer devrait être utile pour tous les
concepteurs d’appli, quel que soit le genre d’appli que
vous choisirez de créer. Non seulement s’aventurer dans
les coulisses d’une appli qui fut un vrai hit est une chance
inouïe, mais les techniques de simulation de la physique
décrites dans ce module vont aussi vous servir pour
d’autres genres d’appli. Et, avant tout, pour les jeux.
Alice utilise un moteur de simulation de physique intitulé
Chipmunk Physics. C’est un dépôt de sous-programmes
précodés créés par une équipe de programmeurs talentueux
de Howling Moon Software, dans le Minnesota. Leur code
permet d’automatiser un grand nombre de procédés qui
déterminent le comportement des objets dans une simulation
du monde physique. Chipmunk Physics et Cocos2d recueillent
des données de l’accéléromètre (le capteur qui se trouve
à l’intérieur de votre téléphone portable et qui envoie des
informations logicielles sur la façon dont l’appareil bouge
ou est orienté) et les utilisent pour agir sur le comportement
d’un monde virtuel. Avec certaines données – par exemple,
l’emplacement de pivots, d’épingles, d’élastiques et de ressorts
virtuels – Chipmunk simulera fidèlement le comportement
qu’adopteraient ces objets dans la réalité. Et le plus incroyable,
c’est que l’utilisation de Chipmunk est gratuite !
Si vous regardiez en détails comment fonctionne Alice, vous
découvririez un monde secret rempli de pivots et de ressorts
sur lesquels les dessins de l’appli sont accrochés. Mais avant de
plonger dans tout ce qui est vraiment technique, voyons voir
comment Alice est composé, d’un point de vue graphique.
Quand vous vous mettrez à créer votre propre appli, vous
trouverez sûrement certaines de nos astuces très utiles.
1
© 2012 Excel With Business
ZONE D’APPRENTISSAGE DU CODAGE
CHAPITRE 10C APPRENDRE AVEC LE CODE D’ALICE
10c.2 La conception d’Alice
L’art d’Alice sort tout droit des illustrations de
Sir John Tenniel dans le roman classique Alice
au pays des merveilles de Lewis Carroll. Il existe
des centaines d’autres livres qui font partie du
domaine public et dont vous pouvez vous inspirer
pour vos propres applis. Créer les dessins de l’appli
Alice nécessite quelques étapes à réaliser à l’aide de
Photoshop.
Tout d’abord, tous les éléments qui se déplacent
doivent être précautionneusement coupés et placés
sur des couches différentes. Ensuite, le décor à
l’arrière-plan a besoin d’être redessiné car sinon, il
risque d’y avoir un « trou » dans le dessin à l’endroit
où les objets en mouvement se trouvaient à l’origine.
Une fois que le décor de l’arrière-plan a été redessiné
sans les parties qui se déplacent, vous pouvez
exporter chaque couche en mouvement en tant
qu’image PNG avec de l’alpha (de la transparence)
tout autour. Le programmeur a désormais une
liberté totale pour attacher les graphismes aux objets
physiques et pour les faire se déplacer librement.
Demandez à votre programmeur si vous avez besoin
de plus de conseils sur la façon de livrer les images et
jeter un coup d’œil aux informations contenues dans
le Module 13 de ce cours.
2
© 2012 Excel With Business
ZONE D’APPRENTISSAGE DU CODAGE
10c.3 Comprendre le moteur Chipmunk
Le moteur Chipmunk Physics est particulièrement
intéressant car vous n’êtes limité que par votre
imagination. Voici un excellent moyen de s’en
rendre compte : imaginez une boîte gigantesque
de Lego Technic, remplie de pivots, de ressorts et
de câbles. C’est l’équivalent dans le monde réel de
ce dont Chipmunk est capable. Vous pouvez faire
des ébauches sur papier pour votre conception, ou
carrément vous représenter celle-ci avec des Lego
Technic. Si c’est possible dans le monde réel, alors
cela fonctionnera dans Chipmunk Physics. Votre
programmeur sera plus au courant de ses possibilités
étendues, mais imaginez plutôt : l’essentiel du
gameplay de véritables hits comme Angry Birds
pourraient être codés sur Chipmunk Physics en une
seule après-midi par un programmeur professionnel.
Ce logiciel est vraiment aussi puissant que ça.
Afin de profiter pleinement de Chipmunk, vous
allez devoir vous pencher sur les APIs (interfaces de
programmation) Cocoa Touch et des procédures plus
complexes de programmation telles que la gestion
de mémoire sous Objective-C. Vous avez le choix :
vous pouvez laisser ce travail à un programmeur
professionnel ou vous pouvez passer du temps à lire
la documentation Apple officielle qui est livrée avec
votre licence de développeur. Quant aux
instructions d’utilisation de Chipmunk
Physics, vous pourrez les trouver
sur http://code.google. com/p/
chipmunk-physics/
Même si vous avez
l’impression pour
le moment
d’être
CHAPITRE 10C APPRENDRE AVEC LE CODE D’ALICE
totalement perdu, vous devriez engranger des
informations utiles grâce à ce module. Même
si, au final, ces informations vous conduisent à
réaliser qu’il vous faut engager un programmeur
professionnel, vous économiserez le temps et l’argent
nécessaires à l’apprentissage d’un moteur physique.
Bien, mettons au clair ce à quoi sert Chipmunk.
Ce système de physique vous permet de définir
le comportement de ce qu’on appelle, dans un
monde où la physique est simulée, les « Corps
Rigides en 2D ». Ne sautez pas encore par la
fenêtre, nous savons que cela sonne complètement
indéchiffrable, mais ce n’est pas vraiment si
compliqué. Il existe quatre genres de dispositifs
physiques différents dans Chipmunk Physics :
• Les espaces (spaces)
• Les corps rigides (rigid bodies)
• Les formes de collision (collision shapes)
• Les collisions/articulations (constraints/joints)
Nous allons vous expliquer ce que
font chacun de ces dispositifs.
Les espaces
Vous l’avez peut-être deviné grâce au nom : un
« espace » est une zone dans laquelle se trouve un
« corps rigide » (voir ci-dessous). Lorsque vous
configurez un « espace », vous devez spécifier la
gravité de l’environnement simulé. Vous définissez
aussi les limites de la zone dans laquelle les « corps
rigides » existent. Tout cela paraîtra beaucoup plus
évident une fois que nous commencerons à analyser
l’échantillon de code plus tard dans ce module.
Les corps rigides
Un corps rigide est une liste de propriétés
attachées à un objet. Par exemple, la masse,
le fonctionnement rotatif, l’inertie, etc.
Toutefois, une distinction importante
à noter est qu’un corps rigide ne
3
© 2012 Excel With Business
ZONE D’APPRENTISSAGE DU CODAGE
possède ni forme, ni dimensions. C’est un ensemble
de propriétés qu’il est ensuite possible d’accrocher
à un objet solide dans le monde physique. Ces
objets solides sont appelés des formes de collision.
Les Formes de Collision
Bien, inspirez bien fort : on va parler un peu de
science. Une Forme de Collision est l’objet physique
qui reprend les propriétés décrites par un Corps
Rigide. En d’autres termes, lorsque vous liez une
Forme de Collision et un Corps Rigide, vous vous
retrouvez avec un objet de l’univers de physique
simulé qui se comporte comme un objet dans la
vraie vie. Les Formes de Collision décrivent aussi
les propriétés de surface d’un objet. La friction
et l’élasticité, par exemple. Dans la Scène de la
Confiture d’Alice (sur laquelle nous nous pencherons
dans un instant), le pot de confiture tombe de la
page et se brise en atteignant le bord de l’écran. Le
pot est une image accrochée à une forme de collision
qui correspond géométriquement aux contours de
l’image. Celle-ci est ensuite reliée à un Corps Rigide
qui décrit des choses telles que la masse du pot.
CHAPITRE 10C APPRENDRE AVEC LE CODE D’ALICE
Docs/. Vous devrez certainement la lire avant
d’être capable de déchiffrer l’échantillon du code
d’Alice, l’une des applis les plus célèbres sur iOS.
La scène du Pot de Confiture
Nous allons décortiquer une véritable scène
fonctionnelle de la célèbre appli Alice for the iPad.
Tout d’abord, visionnez la vidéo de ce module, puis
ouvrez les fichiers d’exemple. Pour commencer,
localiser l’emplacement du fichier Falling.h ; ceci est
le nom arbitraire qui a été choisi pour la scène du Pot
de Confiture. Ce fichier importe les bibliothèques
de code nécessaires pour cette scène, et le fichier .h
est le même pour toutes les scènes de l’appli. Vous
remarquerez que l’appli extrait des bibliothèques
de code dont la page a besoin pour exécuter son
code : Foundation.h, cocos2d.h (les bibliothèques
cocos2d), Chipmunk.h (les bibliothèques
Chipmunk Physics), Constants.h (le fichier de
configuration de l’appli), et PhysicsContent.h
Vous devez donc commencer à réaliser qu’en fait,
les images de Photoshop ne se cognent pas les unes
aux autres dans le monde physique. En réalité, ce
qui se passe, c’est que ce sont les Formes de Collision
et les Espaces qui se cognent derrière les images.
Les Collisions et les Articulations
Les collisions et les articulations sont des dispositifs
qui précisent si les Corps Rigides sont de type
glisser, pivot, bousculer ou ressort. En regardant un
peu les scènes de Alice for the iPad, vous pouvez
deviner quels types de pivots et d’articulations
sont utilisés dans les différentes scènes.
10c.4 Coder avec Chipmunk
Nous vous livrons plein de nouvelles informations
à toute vitesse, alors n’hésitez pas à ralentir
un peu et à vous procurer la documentation
de Chipmunk, téléchargeable sur : http://files.
slembcke. net/chipmunk/release/ChipmunkLatest-
4
© 2012 Excel With Business
ZONE D’APPRENTISSAGE DU CODAGE
CHAPITRE 10C APPRENDRE AVEC LE CODE D’ALICE
– Nous allons examiner le code étape par étape. Allez-y, vous pouvez jeter un œil au contenu de Falling.h :
#import “cocos2d.h”
#import “chipmunk.h”
#import “Constants.h”
#import “PhysicsContent.h”
@interface Falling : PhysicsContent {
Ce fichier recense toutes les
ressources utilisées par la scène.
Vous pouvez voir que la scène
appelle les bibliothèques Cocos2d
ainsi que Chipmunk Physics, puis
qu’elle référence deux fichiers
que nous avons créés pour
définir des parties de l’appli.
}
@end
Figure 10c.1...
Puis, maintenant, au contenu de Falling.m:
#import “Falling.h”
@implementation Falling
-(id)init{
self = [super init];
if(nil != self){
Cela permet de définir les
propriétés du corps rigide
du pot de confiture.
CGSize size = [[CCDirector sharedDirector] winSize];
cpBody *zeroBody = cpBodyNew(INFINITY, INFINITY);
zeroBody->p = cpvzero;
5
© 2012 Excel With Business
ZONE D’APPRENTISSAGE DU CODAGE
CHAPITRE 10C APPRENDRE AVEC LE CODE D’ALICE
cpShape *wallShape = cpSegmentShapeNew(zeroBody,
cpv(0,0), cpv(0,size.height), 5);
wallShape->e = 0.5;
wallShape->u = 1.0;
cpSpaceAddStaticShape(space, wallShape);
wallShape = cpSegmentShapeNew(zeroBody, cpv(0,size.
height), cpv(size.width,size.height), 5);
wallShape->e = 0.5;
wallShape->u = 1.0;
cpSpaceAddStaticShape(space, wallShape);
wallShape = cpSegmentShapeNew(zeroBody, cpv(size.
width,size.height), cpv(size.width,0), 5);
wallShape->e = 0.5;
wallShape->u = 1.0;
cpSpaceAddStaticShape(space, wallShape);
wallShape = cpSegmentShapeNew(zeroBody, cpv(size.width,0), cpv(0,0), 5);
wallShape->e = 0.5;
wallShape->u = 1.0;
cpSpaceAddStaticShape(space, wallShape);
Ce code décrit les « murs » qui servent de frontières pour entourer la
page afin d’empêcher que le pot de confiture ne glisse hors de l’écran de
l’iPad et dans un vide infini. De nombreuses pages d’Alice sont entourées
par des murs invisibles afin de garder les objets sur la page.
CCSprite *marmalade= [CCSprite spriteWithFile:@”marmalade.png”];
[marmalade setPosition:CGPointMake(550, 700)];
[self addChild:marmalade z:-1];
Ce code va chercher les sprites graphiques
du pot de confiture et les accroche à un
objet de notre monde physique.
6
© 2012 Excel With Business
ZONE D’APPRENTISSAGE DU CODAGE
CHAPITRE 10C APPRENDRE AVEC LE CODE D’ALICE
cpVect marmaladeVerts[] = {
cpv(-marmalade.contentSize.width/2,-marmalade.contentSize.height/2),
cpv(-marmalade.contentSize.width/2, marmalade.contentSize.height/2),
cpv( marmalade.contentSize.width/2, marmalade.contentSize.height/2),
cpv( marmalade.contentSize.width/2,-marmalade.contentSize.height/2),
};
Ce code décrit la forme du pot en vertex ; cela permet à Chipmunk Physics de
connaître ses dimensions, mais attention : Chipmunk Physics ignore complètement
les images que vous accrochez à vos objets physiques. Le moteur ne peut voir
que les Formes et les Corps Rigides auxquels vous accrochez les images.
cpFloat mass = 5;
cpBody *marmaladeBody = cpBodyNew(mass,
cpMomentForPoly(mass, 4, marmaladeVerts, cpvzero));
marmaladeBody->p = cpv(570, 700);
cpSpaceAddBody(space, marmaladeBody);
Ce code spécifie le Corps Rigide du pot de
confiture, c’est-à-dire ses propriétés physiques.
cpShape *shape = cpPolyShapeNew(marmaladeBody, 4, marmaladeVerts, cpvzero);
shape->e = 0.3; shape->u = 1.0;
shape->data=marmalade;
cpSpaceAddShape(space, shape);
}
return self;
}
-(void)dealloc{
[super dealloc];
Ce code donne comme consigne à Chipmunk
Physics d’utiliser les vertex que nous avons définis
et donne à l’objet une forme dans l’univers de
Chipmunk. Félicitations ! Vous venez de réussir
votre première appli Chipmunk Physics !
}
@end
7
Figure 10c.2...
© 2012 Excel With Business