Aller au contenu






Photo

Transformer votre téléphone en manette de jeu.



Voilà un bout de code tout simple pour transformer votre téléphone en manette de jeu :

App.as

package
{
import flash.desktop.NativeApplication;
import flash.display.Sprite;
import flash.events.AccelerometerEvent;
import flash.sensors.Accelerometer;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;

public class App extends Sprite
{
  private var _nativeApplication:NativeApplication;
  private var _client:PeerClient;
  private var _acc:Accelerometer;
  private var _log:TextField;
  private var _connected:Boolean;
  public function App()
  {
   trace(this);
   _nativeApplication = NativeApplication.nativeApplication;
   _log = new TextField();
   _log.autoSize = TextFieldAutoSize.LEFT;
   addChild(_log);
 
   _acc = new Accelerometer();
   _acc.addEventListener(AccelerometerEvent.UPDATE,handleAccelerometerUpdate);
   AccelerometerData.register();
 
   _client = new PeerClient();
   _client.addEventListener(PeerClientEvent.NETCONNECTION_CONNECTED,handleNetConnectionConnected);
   _client.addEventListener(PeerClientEvent.NETGROUP_CONNECTED,handleNetGroupConnected);
   _client.connect();
  }
 
  protected function handleNetConnectionConnected(event:PeerClientEvent):void
  {
   trace(this,'handleNetConnectionConnected',event);
   _log.text = 'handleNetConnectionConnected';
  }
 
  protected function handleNetGroupConnected(event:PeerClientEvent):void
  {
   trace(this,'handleNetGroupConnected',event);
   _log.text = 'handleNetGroupConnected';
   _connected = true;
  }
 
  protected function handleAccelerometerUpdate(event:AccelerometerEvent):void
  {
   if(!_connected) return;
   var data:AccelerometerData = new AccelerometerData();
   data.x = event.accelerationX;
   data.y =event.accelerationY;
   data.z = event.accelerationZ;
   _client.send(data);
  }
}
}
 

PeerClient.as

package
{
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.NetStatusEvent;
import flash.net.GroupSpecifier;
import flash.net.NetConnection;
import flash.net.NetGroup;

public class PeerClient extends EventDispatcher
{
  private var _nc:NetConnection;
  private var _group:NetGroup;
  private var _groupName:String = "goabonga/game";
  private var _address:String = "225.225.0.1:30303";
  public function PeerClient(target:IEventDispatcher=null)
  {
   trace(this);
   super(target);
  }
  public function connect():void
  {
   trace(this,'connect');
   _nc = new NetConnection();
   _nc.addEventListener(NetStatusEvent.NET_STATUS, handleNetStatus);
   _nc.connect("rtmfp:");
  }
 
  public function send(data:Object):void{
   trace(this,'send',data)
   _group.post(data);
  }
 
  protected function handleNetStatus(event:NetStatusEvent):void
  {
   trace(this,'handleNetStatus',event.info.code);
 
   switch(event.info.code){
    case "NetConnection.Connect.Success":
         initLocalGroup();
         dispatchEvent(new PeerClientEvent(PeerClientEvent.NETCONNECTION_CONNECTED));
         break;
   
    case "NetGroup.Connect.Success":
         dispatchEvent(new PeerClientEvent(PeerClientEvent.NETGROUP_CONNECTED));
         break;
   
   
   }
  }
 
  protected function initLocalGroup():void
  {
   trace(this,'initLocalGroup');
   var groupspec:GroupSpecifier = new GroupSpecifier(_groupName)
   groupspec.postingEnabled = true;
   groupspec.ipMulticastMemberUpdatesEnabled = true;
   groupspec.addIPMulticastAddress(_address);
 
   _group = new NetGroup(_nc,groupspec.groupspecWithAuthorizations());
   _group.addEventListener(NetStatusEvent.NET_STATUS,handleNetStatus);  
  }
 
}
}
 

PeerClientEvent.as

package
{
import flash.events.Event;

public class PeerClientEvent extends Event
{
  public static var NETCONNECTION_CONNECTED:String = 'onNetConnectionConnected';
  public static var NETGROUP_CONNECTED:String = 'onNetGroupConnected';
  public function PeerClientEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
  {
   super(type, bubbles, cancelable);
  }
}
}
 


AccelerometerData.as


package
{
import flash.net.registerClassAlias;

public class AccelerometerData extends Object
{
  public var x:Number;
  public var y:Number;
  public var z:Number;
 
  public function AccelerometerData()
  {
  }
 
  public function toString():String
  {
   return '[object AccelerometerData x="'+x+'" y="'+y+'" z="'+z+'"]';
  }
 
  static public function register():void
  {
   registerClassAlias('AccelerometerData',AccelerometerData);
  }
 
}
}
 


Voilà le code de l'application Air qui sera capable de récupérer les informations via le P2P :


App.as

package
{
import flash.desktop.NativeApplication;
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;

public class App extends Sprite
{
  private var _nativeApplication:NativeApplication;
  private var _server:PeerServer;
  private var _log:TextField;
  public function App()
  {
   trace(this);
   _nativeApplication = NativeApplication.nativeApplication ;
 
   _log = new TextField();
   _log.autoSize = TextFieldAutoSize.LEFT;
   addChild(_log);
 
   AccelerometerData.register();
 
   _server = new PeerServer();
   _server.addEventListener(PeerServerEvent.NETCONNECTION_CONNECTED,handleNetConnectionConnected);
   _server.addEventListener(PeerServerEvent.NETGROUP_CONNECTED,handleNetGroupConnected);
   _server.addEventListener(PeerServerEvent.NET_DATA,handleNetData);
   _server.connect();
  }
 
  protected function handleNetConnectionConnected(event:PeerServerEvent):void
  {
   trace(this,'handleNetConnectionConnected',event);
   _log.text = 'handleNetConnectionConnected';
  }
 
  protected function handleNetGroupConnected(event:PeerServerEvent):void
  {
   trace(this,'handleNetGroupConnected',event);
   _log.text = 'handleNetGroupConnected';
  }
 
  protected function handleNetData(event:PeerServerEvent):void
  {
   trace(this,'handleNetData',event);
   _log.text = 'handleNetData : '+event.data;
  }
}
}
 

PeerServer.as

package
{
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.NetStatusEvent;
import flash.net.GroupSpecifier;
import flash.net.NetConnection;
import flash.net.NetGroup;

public class PeerServer extends EventDispatcher
{
  private var _nc:NetConnection;
  private var _group:NetGroup;
  private var _groupName:String = "goabonga/game";
  private var _address:String = "225.225.0.1:30303";
  public function PeerServer(target:IEventDispatcher=null)
  {
   trace(this);
   super(target);
  }
  public function connect():void
  {
   trace(this,'connect');
   _nc = new NetConnection();
   _nc.addEventListener(NetStatusEvent.NET_STATUS, handleNetStatus);
   _nc.connect("rtmfp:");
  }
 
  protected function handleNetStatus(event:NetStatusEvent):void
  {
   trace(this,'handleNetStatus',event.info.code);
   switch(event.info.code){
    case "NetConnection.Connect.Success":
         initLocalGroup();
         dispatchEvent(new PeerServerEvent(PeerServerEvent.NETCONNECTION_CONNECTED));
         break;
   
    case "NetGroup.Connect.Success":
         dispatchEvent(new PeerServerEvent(PeerServerEvent.NETGROUP_CONNECTED));
         break;
   
    case "NetGroup.Posting.Notify":
         dispatchEvent(new PeerServerEvent(PeerServerEvent.NET_DATA,event.info.message));
         break;
   }
  }
 
  protected function initLocalGroup():void
  {
   trace(this,'initLocalGroup');
   var groupspec:GroupSpecifier = new GroupSpecifier(_groupName)
   groupspec.postingEnabled = true;
   groupspec.ipMulticastMemberUpdatesEnabled = true;
   groupspec.addIPMulticastAddress(_address);
 
   _group = new NetGroup(_nc,groupspec.groupspecWithAuthorizations());
   _group.addEventListener(NetStatusEvent.NET_STATUS,handleNetStatus);  
  }
}
}
 


PeerServerEvent.as

package
{
import flash.events.Event;

public class PeerServerEvent extends Event
{
  public static var NETCONNECTION_CONNECTED:String = 'onNetConnectionConnected';
  public static var NETGROUP_CONNECTED:String = 'onNetGroupConnected';
  public static var NET_DATA:String = 'onNetData';
  private var _data:Object;
 
  public function PeerServerEvent(type:String,data:Object = null, bubbles:Boolean=false, cancelable:Boolean=false)
  {
   _data = data ;
   super(type, bubbles, cancelable);
  }
  public function get data():Object
  {
   return _data;
  }
}
}
 


AccelerometerData.as

package
{
import flash.net.registerClassAlias;
public class AccelerometerData extends Object
{
  public var x:Number;
  public var y:Number;
  public var z:Number;
 
  public function AccelerometerData()
  {
  }
 
  public function toString():String
  {
   return '[object AccelerometerData x="'+x+'" y="'+y+'" z="'+z+'"]';
  }
 
  static public function register():void
  {
   registerClassAlias('AccelerometerData',AccelerometerData);
  }
 
}
}
 





ou


Rétroliens pour ce billet [ URL du rétrolien ]

Il n'y a pas de rétrolien pour ce billet

Mai 2012

D L M M J V S
  12345
6789101112
13141516 17 1819
20212223242526
2728293031  

Derniers billets

Ma photo

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS - Tel. 0826 466 613 - Fax. 01 72 70 31 38

FFP