Jeu en réseau avec OSC: MultiPass For Freedom

De Centre de Ressources Numériques - Association Labomedia
Aller à : Navigation, rechercher

Ce jeu utilise le Multicast et le module python txosc.

Le Multicast permet de diffuser et collecter des données entre tous les connectés.

  • Jeu en réseau Massivement multi-joueurs en OSC, en local (MMO), j’exagère un peu, on est en local, le "massivement" sera 10 joueurs.
  • Serveur avec script en python 2.7 UDP MultiCast
  • Jeu dans Blender 2.62 (python3.2)

Exemple avec 3 joueurs: Mpff 02.png Exemple avec 10 joueurs: 10players.png

Sommaire

Ressources

Lancer un script en python 3

Pour lancer un script en python3, le shebang #! /usr/bin/python3 ne suffit pas, il faut lancer en console

python3 votre_script.py

Geany

sudo apt-get install geany geany-plugins

Un éditeur plus évolué que gedit : Geany. Il permet d'avoir la liste des Symboles, le plier/déplier, et de lancer le script directement.

Il faut installer geany et geany-plugins. Pour définir la version de python utilisée en cliquant sur "Exécuter", aller à Construire, Définir les commandes de construction, Case Excécuter: python/%e ou python3/%e

Il est possible de le configurer pour avoir la doc python intégrée, des sauvegardes automatiques, de débugger, d'envoyer les fichiers sur git ou svn.

Get instant documentation in Python

Eclipse

Ultime niveau du programmeur.

OSC.py pour python3.2

twisted et txosc n'ont pas encore été porté en python3. OSC.py de pyOSC a tout ce qu'il faut pour créer un client/serveur. Il sera utilisé dans Blender en python 3.2

Un peu de doc, sinon tout est dans les commentaires du script ( Extrait et résumé)

Routage

Liens Ressources vers Wikipedia:

Mpff 01.png

Le routage est le mécanisme par lequel des chemins sont sélectionnés dans un réseau pour acheminer les données d'un expéditeur jusqu'à un ou plusieurs destinataires.

Le serveur de jeu doit envoyer des données à tous les joueurs: c'est du routage ! Image Wikipedia:

Unicast

Broadcast

Multicast

twisted

twistedmatrix.com

sudo apt-get install python-twisted

txosc un module python qui utilise twisted

txosc our envoyer recevoir en OSC:

Developpé par

Ce module est inclus dans mes fichiers, sinon pour l'installer:

sudo apt-get install python-txosc

Multicast

En résumé, le Multicast permet à des clients et des serveurs de se connecter sur tous la même adresse (ip, port):
La plupart des routeurs ( celui qui vous donne votre adresse ip avec le dhcp et vous connecte à internet ) supporte le Multicast. En IPV4, les adresses entre 224.0.0.9 et 224.0.0.255 sont réservées au Multicast.

Plus de détails sur le Multicast

Asynchrone

Il faut que je bosse là-dessus !!



Principe du jeu

Toutes les datas sont toujours dans des bundles, pour que les transferts et traitements soient très rapides, et ne pas ralentir le jeu.

Shéma de principe
Game Server Réseau Routeur Réseau Joueur Lambda
Serveur Multicast :
  • Python 2.7
  • Txosc qui utilise Twisted
  • Reçoit les datas des clients
  • Traite les datas
  • Envoie les datas utiles pour le jeu en réseau toutes les 0,015 s
eth Routeur du réseau local eth
  • Joueur :
    1. Script en python 2.7 relay.py
      • txosc
      • Envoie et reçoit en UDP async avec Blender
      • Envoie et reçoit le Multicast
    2. Blender 2.62
      • Python 3.2
      • pyOSC
      • socket
      • Reçoit et envoie les datas à relay.py
      • Tourne à 60 fps ( période de 0,015 s )

Client / Serveur

  • Serveur:
    • Sur le réseau du routeur
    • Peut être utilisé pour lancer un joueur
  • Joueur Client:
    • Lance Joueur

Il n'y a pas à définir quelque part adresse ou port. Tout le monde a les mêmes IP, port : 224.0.0.11, 18888.

Mpff 03.png

Blender 2.62 avec python 3.2

  • La dernière version de Blender avec python 2.7 est la 2.49b toujours disponible (elle date de septembre 2009). J'ai décidé de ne plus l'utiliser: il y a quelques trucs qui cassent les pieds, mais aussi beaucoup d'améliorations dans les dernières versions. Le Game Engine a des améliorations très partiques, tel que les listes déroulantes de sélections des propriétés ou des scripts.
  • Les versions 2.5x et 2.6x utilisent obligatoirement python 3
  • twisted et txosc n'existent pas en python3. La version de twisted python3 est en cours en avril 2012.

Blender ne peut pas utiliser txosc. Il utilise pyOSC qui supporte le Multicast en théorie mais je n'ai pas réussi à le faire marcher! D'où le script relay.py en python 2.7 qui communique avec Blender et le Multicast et sert de relais.

  • Les versions avant 2.62 ont un bug dans le blenderplayer

Ce script relay.py peut être utiliser avec d'autres logiciels que Blender

Un logiciel qui envoie et/ou reçoit en local en OSC, peut être relayer en Multicast avec ce script.

Fichiers

Le python est plus propre, avec des "class", donc sans "global" à tous les étages. Merci à Gérard Swinnen.

  • Rendre exécutable MultiPassForFreedom_Server, puis clic pour lancer le server
  • Rendre exécutable MultiPassForFreedom_Client, puis clic pour lancer un joueur, un seul joueur par PC.

Le fichier pour xubuntu 12.04

mars 2013 : encore beaucoup de bugs

  • Blender 2.62 ou plus, twisted doivent être installés. Les versions avant 2.62 ont des bugs dans le blenderplayer.

Blender 2.6x ne tourne qu'avec python 3. Problème Python 3 :

  • Les recherches sur internet en python 3 donnent très peu de réponses.
  • Beaucoup de modules n'ont pas été portés, et s'ils le sont, la doc est très limitée.
  • J'ai réussi à envoyer sur le multicast avec OSC.py, et à recevoir avec socket, mais avec des datas bizarres. Le script relay est finalement une solution simple.

Utilisation dans d'autres projets

Exemple de soft qui envoient ou recoivent OSC

  • Ardour, Blender with python script, EyesWeb, liblo, a C library for Unix, Max/MSP, OSCulator, Processing, Pure Data, Quartz Composer, Reaktor, SuperCollider, TouchOSC, Traktor DJ Studio, Veejay, VirtualDJ, vvvv.

On peut imaginer un autre logiciel que Blender sur le client.

  • Le serveur doit pouvoir être utilisable aussi dans un projet Multimédia
  • Uniquement sur un réseau local
  • Avec un GUI (genre OSCulator)
  • voir les datas qui circulent
  • set des IP PORT
  • enregistrer des scores ...
Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Les blogs
Atelier du c01n
Logiciels
Thèmes
Interaction
Boîte à outils
Participer