lundi 31 décembre 2007

Double buffering en C# CF

Je fais un billet dessus parceque j'ai eu du mal à trouver une des informations rapidement à ce propos.

C'est quoi le double buffering ?
Un méthode de rendu.

A quoi ça sert ?
A résoudre le problème de clignotement de l'écran lorsqu'on redessine tout l'écran (flickering).

Comment on fait ?
On crée une classe qui hérite de PictureBox et on surcharge les méthodes OnPaint() et OnPaintBackground() :

protected override void OnPaint(PaintEventArgs e)
{
Bitmap buffer = new Bitmap(this.Width, this.Height);
Graphics graphics = Graphics.FromImage(buffer);
Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);
PaintEventArgs arg = new PaintEventArgs(graphics, rect);

//paint in the buffer
PaintEverythingInTheBuffer(arg);

//paint on the screen
e.Graphics.DrawImage(buffer, 0, 0);

//clean
graphics.Dispose();
buffer.Dispose();
}

protected override void OnPaintBackground(PaintEventArgs e)
{
//do nothing
}

Voilà, on peut faire plus simple en évitant de créer un PaintEvenArg et en se contentant du Graphics. On peut aussi remplir le buffer dans une fonction appelé avant l'évènement OnPaint() pour ne faire que e.Graphics.DrawImage(buffer, 0, 0); dans l'évènement OnPaint().

Voilà avec ça, adieu les clignotements !

Tower Defence


Bon voilà je m'y suis mis, histoire de voir ce qui était possible de faire sur un appareil comme le Touch. Il y a forcément quelque contraintes imposées (et même choisies):
  • pas de clavier, donc tout doit être tactile
  • les boutons qui doivent apparaîtrent sur l'écran (puisque pas de clavier) prennent sur l'aire de jeu
  • puissance et RAM limitée avec le Touch
  • je développe en C# CF
Après un peu de code, je me retrouve avec un petit Tower Defence qui fonctionne et qui possède ces fonctionnalités :
  • Ajout de de 2 types de tour différents possédant des armes différantes, des portées différantes, des cadences différentes, etc
  • Upgrade des tours
  • Augmentation des caractéristiques des enemis au fur et à mesure des nouvelles vagues d'assaut (vitesse, HP, gain, coût)
Pour le gameplay je m'inspire directement de ce très agréable Tower Defence, mais en simplifié (je pense pas implémenter d'effet de zone, peut être une tour qui tire sur plusieurs enemis en même temps pour compenser). Le but final étant d'avoir un Tower Defence qui assure un framerate minimum ! Maintenant, il faut que je rajoute d'autres types de tour, mais ça va être rapide, et que j'équilibre tout ça... Ni trop dur, ni trop facile, il faut que ça arrive à me faire tenir pendant les 35 minutes de métro entre chez moi et le bureau !
Petite info, j'ai développé l'architecture pour charger des maps depuis le file system, et donc je verrai bien un petit éditeur de map. Je pense aussi à faire une évolution du jeu vers un Tower Defence où les enemis peuvent attaquer les défenses. Dernière chose, je voulais faire design proche de Geometry Wars, mais bon je commence à regarder d'autres possibilités :
  • Warcraft 3 ? (heroic fantasy de manière générale)
  • Starcraft ? (sci-fi)
  • Lapin crétin ? (humour)
  • autres ?
Comme je suis pas trop douer en pixel art, il me faudrait un set de textures existant, je sais pas si ça existe pour le jeux vidéo ce genre de chose (gratuit ou payant) .

Je ferai un autre billet quand j'aurai une beta jouable, téléchargeable, et avec un petit guide utilisateur.

mardi 25 décembre 2007

Et en 2008 ?

Vous connaissez geometry wars ? J'ai eu l'occasion d'y jouer sur DS. C'est vraiment sympa, et tout particulièrement le design. En partant de là, j'imaginerai bien un petit jeu du style tower defence. On pourrait dessiner ses défenses avec des signes simples du genre carré, rond, croix, etc... Je tenterai bien ça en .NET 2.0, histoire de voir si ça envoie la purée à coup de graphic.DrawLine(). Point de vue ambiance, faudrait que ça tire de tous les côtés sans s'arrêter. Que ça monte crescendo tout au long du round.

Je pense que je vais regarder ça en rentrant :)

lundi 24 décembre 2007

Noël & pub

Je profite de me rappeler que j'ai un blog sur le Touch pour poster une news la veille de noël. Et oui, beaucoup beaucoup de boulot depuis 2 mois, alors quand je rentre le soir, j'ai pas vraiment envie de replonger dans le code. Cependant, le boulot avance bien, et histoire de nous faire un peu de pub je vais faire un petit compte-rendu :

Je bosse dans ma société créée avec mes 2 associés (Serge et Fabien) : Tharsis Software. On est actuellement dans l'incubateur de la ville Paris situé près de la Bourse depuis 3 mois.

Que fait-on ? Très simplement, on a développé une technologie qui nous permet de faire comme Google Earth, c'est à dire visualiser en 3D temps réel une planète en utilisant des photos satellites et des données topographiques. On peut aussi descendre très bas au niveau 3D : dernièrement on a modélisé la planète Mars avec des images du cratère Victoria en 27 cm/pixel et avec du relief, on y a alors ajouté un petit rover qui se balade dedans pour montrer la possibilité de faire de l'intéractif (tout en respectant les véritables échelles). Pour la manipulation du rover, on peut le voir vers la fin de cette vidéo. Pour info, la 1ère partie de la vidéo concerne notre logiciel SLS utilisé par le CNES.
La grosse différence avec Google Earth, c'est le service proposé : nous adaptons totalement le logiciel (contenu et contenant) au besoin de la société demandeuse. Bref, vous pouvez avoir votre Google Earth à vous (et surtout sans les placemarks de tous les autres), le tout skinné à vos couleurs, tout celà très simplement accessible depuis une page web (pas d'installation de setup.exe, ou de plugin IE, firefox, etc...).

Vous voulez tester ce à quoi ça ressemble ? On a fait une petite application basique pour facebook, I Am There, qui ajoute la photo de ses utilisateurs sur le globe en 3D, on peut alors voir qui est proche de soi et accéder à son profil.

Si toi qui lit cette news tu es une société qui recherche un outil de communication inédit, intéractif, moderne et totalement adapté à tes besoins, contacte nous !