Windows 8.1 : Classes XNA

by Nicolas Calvi 2. octobre 2013 12:02

Il m'est souvent arrivé de porter du code .Net (on va dire Classique, genre WPF, etc.) sur du Windows Store App. Une des problématiques que je rencontrais souvent était les bouts de code qui utilisaient des classes du Framework XNA.

De manière général, ces classes étaient souvent les mêmes : Vector3, Matrix, MathHelper, etc. Mais quand on arrive dans le monde des Windows Store App il est difficile de retrouver ses APIs. 

Afin de vous éviter de devoir décompiler ses classes, je vous propose aujourd'hui de télécharger le code source de celle-ci, compatible avec les Windows Strore App. C'est gratuit, c'est que du bonheur :)

Pour le téléchargement c'est ici : Microsoft.Xna.Framework.rar (33,84 kb)

 

Application Kinect !

by Nicolas Calvi 9. mars 2012 19:29

Ca y est, nous avons réalisé une vidéo de notre application Kinect for Windows à destination d'iDTGV, une publicité interactive qui a d'ailleurs fait l'objet d'une session au Techdays 2012 par votre serviteur.

"Cette vidéo présente notre projet Kinect for Windows de "Publicité interactive". La finalité du concept de publicité interactive avec Kinect est de recréer une expérience positive avec la marque. Pour illustrer ce concept nous avons décidé de réaliser un partenariat avec iDTGV. 

Ce projet a été réalisé avec une équipe pluri-disciplinaire (Designer, Graphiste, Developpeur) et a mis en avant les problématiques de développement des gestuelles avec Kinect d'une part, et de rendu visuel (XNA) d'autre part."

Lien Webcast session au Techdays 2012

Projet CodePlex : Surface 2D Engine

by Nicolas Calvi 18. octobre 2010 14:57

Je vous présente mon deuxième projet CodePlex, un moteur 2D pour XNA 3.1 et Microsoft Surface. Il contient un moteur pour facilement faire des projets XNA sous Microsoft Surface, beaucoup de choses ont été abstraite pour vous simplifier la tâche. Vous avez les sources, c'est libre de droit, j'attend vos retours avec impatience, enjoy :)

Ca se télécharge ici : http://blacksurface2dengine.codeplex.com/

Lire du son avec DirectX

by Nicolas Calvi 30. septembre 2010 12:19

Aujourd'hui je vous propose une petite classe que j'ai écrite et qui permet de jouer un son en WPF (et donc par extension sur Microsoft Surface). En effet, par expérience je n'était pas satisfait des objets (MediaElement, SoundPlayer, etc.) fournis par défaut dans le Framework .Net car soit ils leurs manquent des fonctionnalités (par exemple la durée du média pour le SoundPlayer), soit ils sont compliqués a mettre en place (MediaElement qui doit forcément être dans l'arbre visuel). J'ai donc pris le problème a bras le corps et décidé d'écrire un petit bout de code avec les assemblies DirectX Managées.

La classe est simple et fait des opérations basiques, a savoir lire un fichier audio sur le disque dur et nous notifie quand elle commence la lecture ou l'arrête. On peut bien sûr allez plus loin, mais je donne ici plus un squelette qu'une classe ultra complète. Pour l'utiliser, il faut installer le SDK DirectX pour pouvoir utiliser l'assembly Microsoft.DirectX.AudioVideoPlayback. Si vous ne désirez pas installer le SDK je vous la fournis ci-dessous.

DirectAudioPlayer.cs (3,95 kb)

AudioVideoPlayback.rar (20,98 kb)

L'avantage de cette petite classe c'est qu'en passant par DirectX, on bénéficie des codecs installés sur son poste car cela passe par DirectShow. En espérant que cela vous sera utile.

Gestion des contacts Surface sous XNA 3.1

by Nicolas Calvi 11. février 2010 15:47
Aujourd'hui je vous propose une petite librairie pour Surface que j'ai développé. Elle vous permet d'ajouter la gestion des contacts surface dans une application XNA 3.1. Pour télécharger cette librairie c'est par là : XnaTouchManager.rar (7,68 kb).

Cette librairie se compose en deux classes :

XnaTouchManager :

Classe statique qui implémente la gestion des contacts. Pour pouvoir utiliser la classe, il faut apporter deux modifications dans votre application root Surface XNA.
private void InitializeSurfaceInput()
{
  // ...
  // Placer la ligne a la fin de la fonction 

  XnaTouchManager._ContactTarget = contactTarget;
}
protected override void Update(GameTime gameTime)
{
  if (this.m_bIsApplicationActivated || this.m_bIsApplicationPreviewed)
  {
    if (this.m_bIsApplicationActivated)
    {
      XnaTouchManager.Update((float)gameTime.ElapsedGameTime.TotalMilliseconds);
    }

    // ...
    // Reste de la fonction ici
  }
}
Ensuite pour accéder aux fonctions de ce manager il existe des fonctions statiques :

- XnaTouchContact GetContact(int p_iD)
  Cette fonction récupère un contact par son identifiant, elle renvoie NULL si elle ne l'a pas trouvé.

- bool TryGetContact(int p_iD, out XnaTouchContact p_oContact)
  Cette fonction test si un contact existe, si il existe elle renvoie l'instance du contact en paramètre out, le retour de la fonction détermine si le contact a été trouvé.

Et des variables statiques rafraichis a chaque Update :
- ContactsNew : Liste des nouveaux contacts, cela veux dire qu'ils n'étaient pas présents au dernier Update.
- ContactsUpdate : Liste des contacts encore présent, cela veux dire qu'ils étaient présents au dernier Update
- ContactsOld : Liste des anciens contacts, cela veux dire qu'ils étaient présents au dernier Update et que maintenant il n'existe plus.

Cela vous permet donc de gérer facilement la mise à jour de vos conctacts.

Il reste une dernière classe : XnaTouchContact

Elle permet quand vous utilisez les fonctions  GetContact et TryGetContact de vous fournir le contact rechercher et d'où il provient (liste des nouveaux contacts, des mises à jours ou des anciens).

J'espère que cela vous sera utile, je suis aussi preneur de vos retours.