May 03 2010

Openframeworks Shmup (wip) part 1

Tag: jeux vidéo,openFrameworks,softsTurbo Connard @ 21:59

Je me suis replongé dans openframeworks ! youpi !

Pour essayer de bien comprendre comment fonctionne la POO en C++, j’ai développé un mini shmup. Je ne pensais pas aller si loin dans la POO mais je suis bien content de l’avoir fait car j’ai désormais toutes les clés nécessaires au dev de base.

  • Syntaxe
  • Objets primaires
  • Vecteurs
  • Héritage
  • références vs pointeurs

Le projet :

Un écran titre : chargement d’images, gestionnaire d’écran, etc…
Le jeu : déplacement d’un vaisseau, tir, tests de collision des missiles, hitbox, ennemis, tir des ennemis…

En fait je voulais faire un test sur un projet à PLEIN de sprites et plein de tests de collisions. Un maniac shooter !. Je ne pense pas avoir développé le shmup de la meilleure façon mais ça m’a permis d’appréhender quelques problématiques simples de programmation.

gestionnaire d’écrans

Le principe de base d’of (et de proce55ing) c’est deux méthodes appelées successivement soixante fois par seconde et dans l’ordre :

  • update
  • draw

dans la première on calcule les déplacement, ce qui se passe de nouveau etc… et dans la deuxième on fait le rendu (affichage).
Ca marche très bien pour du prototypage (but premier des deux logiciel) mais si on veut aller plus loin, je trouve qu’on est vite limité. Et puis par soucis de POO on a envie de séparer l’affichage d’un truc dans sa propre fonction draw.

J’ai pas encore attaqué l’événementiel avec OF alors pour l’instant j’ai trouvé cette combine qui me va bien.

 

Le principe est simple :

on a un entier _currentEcran et un tableau d’Ecran à deux entrées.

Les deux écrans (EcrantTitre et EcranGame) étendent Ecran et hérite de la méthode update et draw. Il faudra bien sûr les surcharger pour que les méthodes fassent leur propre tambouille. Je crée ensuite mes deux pointeurs d’ écrans  et je les balance  dans le tableau.

update et draw de testApp appellent respectivement :

ecran[_currentEcran]->update();
ecran[_currentEcran]->draw();

Pour changer d’écran il ne reste plus qu’a changer _currentEcran.

 

void testApp::setup(){
ecrans[0] = new EcranTitle();
ecrans[1] = new EcranGame();
}
//————————————————————–
void testApp::update(){
ecrans[_currentEcran]->update();
}//————————————————————–
void testApp::draw(){
ecrans[_currentEcran]->draw();
}

Apr 12 2009

Un premier pas vers openFrameworks

Tag: Eclipse,openFrameworksTurbo Connard @ 23:59

Bon alors pourquoi passer à openFrameworks ? J’ai tenté de lancer un premier “vrai projet” en processing et dès le début j’ai souffert des performances de java.

Bref, j’ai tenté de descendre “plus bas” pour bénéficier des avantages du c /c++. Comme je partais de zéro en c/c++ j’ai suivi les tutoriels du site du zero ! Un très bon et gros tutorial qui raconte beaucoup de choses. Ca vaut vraiment la peine de la parcourir pour se rendre compte de l’organisation en c/c++ . Même s’il est possible de créer des classes, je déplore l’absence de packages…

Avec mes bases en c++ j’ai essayé de faire un petit jeu et la pof ! problème avec la bibliothèque SDL : impossible d’avoir 3 touches enfoncées en même temps. Donc je ne pouvais même pas tirer avec un vaisseau et me déplacer en diagonale ! La documentation ne donne rien la dessus, exit SDL…

J’ai donc refait une passe sur openFrameworks et le premier essai est concluant ! on peut bouger un vaisseau en diagonale et tirer… Et on peut faire plein d’autres trucs marrants biensûr encore faut il réussir à compiler. Et c’est la que ça se complique, il existe très peu de documentation pour compiler de l’openFrameworks sous eclipse. OpenFrameworks est pulbié en plusieurs versions (xcode pour mac, codeblocks pour linux et codebock et visual pour windows) mais pas de version eclipse : les boules.

J’ai donc entrepris de compiler les exemples openFrameworks sous eclipse et c’était pas une mince affaire mais ça m’a appris pas mal de chose sur l’organisation d’OF et j’ai finalement réussi.

J’ai même développé un petit fichier .bat qui transforme les exemples OF en projet eclipse. Il suffit ensuite d’importer “import an existing project into workspace” les projets après avoir lancé le .bat.

donc

  1. Télécharger / installer mingw (compilateur open source)
  2. Ajouter le chemin c:\mingw\bin dans la variable PATH de windows (clic droit poste de travail, propriétés, avancé, variables d’environnements)
  3. Télécharger OpenFrameworks version codeblocks.
  4. Déziper le tout quelque part (c:\of)
  5. Déziper le eclipsofy.zip à la racine du répertoire d’OpenFrameworks
  6. Lancer le eclipsofy.bat
  7. Créer un workspace à la racine du répertoire d’OpenFrameworks (c:\of\workspace par exemple)
  8. Lancer eclipse, choisir le workspace nouvellement créé
  9. Installer CDT sous eclipse (Help, software update, environement C++)
  10. Importer un projet et voila !