L’intégration d’un GamePad pour Flash est quelque chose que j’attend depuis longtemps.

Je suppose que c’est difficile à mettre en place dans le plugin Flash et que c’est pour cela qu’Adobe ne l’a fait que pour AIR ( GameInput )

Sur d’excellents sites comme http://snesbox.com/ ou http://www.abobosbigadventure.com les developpeurs proposent un exécutable a part entière pour pouvoir jouer avec un Gamepad.

Il y a quelques mois, Google annonçait la prise en charge des GamePad par Chrome.
En fait le support se limite au pad de la xbox 360, celui de la ps3 et d’un gamepad Logitech dont j’ai oublié le nom…

Pas génial mais c’est un bon début !

Pour pouvoir l’utiliser dans Flash il suffit d’autoriser les appels call/callback JavaScript dans votre projet ActionScript ( via allowScriptAccess )

J’ai commencé a travailler sur le sujet et voici une page de démo

et le code source de ma classe de GamePad

package 
{
	/**
	 * ...
	 * @author @YoupSolo
	 * yopsolo.fr 
	 */
	import flash.external.ExternalInterface;

	public class BrowserGamePad
	{
		private var _ready:Boolean;

		public function BrowserGamePad()
		{
			_ready = false;

			// entry point
			if (ExternalInterface.available)
			{
				// create the gamepad object
				ExternalInterface.call("eval", "var gamepad = new Gamepad();");
				_ready = ExternalInterface.call("eval","gamepad.init()");
			}
		}

		public function getDeviceLength():*
		{
			if (ExternalInterface.available && _ready)
			{
				return ExternalInterface.call("eval", "gamepad.gamepads.length");
			}
		}

		public function getDeviceName(idx:int = 0):*
		{
			if (ExternalInterface.available && _ready)
			{
				var rs:* = ExternalInterface.call("eval", "gamepad.gamepads["+idx+"].id");
				if(rs){
					return rs;
				}
			}
			
			return "???";
		}

		public function getButtons(idx:int = 0):*
		{
			if (ExternalInterface.available && _ready)
			{
				var rs:* = ExternalInterface.call("eval", "gamepad.gamepads["+idx+"].buttons");
				if(rs){
					return rs;
				}
			}
			return [];
		}

		public function getAxes(idx:int = 0):*
		{
			if (ExternalInterface.available && _ready)
			{
				var rs:* =  ExternalInterface.call("eval", "gamepad.gamepads["+idx+"].axes");
				if(rs){
					return rs;
				}
			}
			
			return [];
		}

		public function getTimestamp(idx:int = 0):*
		{
			if (ExternalInterface.available && _ready)
			{
				return ExternalInterface.call("eval", "gamepad.gamepads["+idx+"].timestamp");
			}
		}

		public function get ready():Boolean
		{
			return _ready;
		}



	}

}

Et la contrepartie Javascript


Vote in HexoSearch