Première application iPhone avec Flash

Première application iPhone avec Flash

vote

Après l’article Comment créer une application iPhone avec Flash, vous allez découvrir une petite application iPhone-Flash utilisant l’accéléromètre.

Télécharger les sources

package  
{
  import flash.display.MovieClip;
  import flash.display.StageAlign;
  import flash.display.StageScaleMode;
  import flash.events.Event;
  import flash.sensors.Accelerometer;
  import flash.events.AccelerometerEvent;
  /**
   * ...
   * @author Yann Kozon
   */
  public class IphoneExample extends MovieClip
  {
    private var _acc:Accelerometer;
    private var _xSpeed:Number, _ySpeed:Number;
 
    public function IphoneExample() 
    {
      initApp();
    }
 
    //Initialise l'application
    private function initApp():void
    {
      stage.scaleMode = StageScaleMode.NO_SCALE;
      stage.align   = StageAlign.TOP_LEFT;
 
      _xSpeed = _ySpeed = 0;
 
      //Vérification de la gestion de l'accéléromètre
      if (Accelerometer.isSupported)
      {
        _acc = new Accelerometer();
        _acc.addEventListener(AccelerometerEvent.UPDATE, accUpdateHandler);
        stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
      }
      else
      {
        trace("You need a accelerometer");
      }
    }
 
    //Gestion du rendu de l'application
    private function enterFrameHandler(e:Event):void 
    {
      //bloque le traitement des écouteurs dans la fonction suivante
      e.stopPropagation();
      moveFlashonaute();
    }
 
    //Gestion des changements des valeurs de l'accéléromètre
    private function accUpdateHandler(e:AccelerometerEvent):void 
    {
      _xSpeed -= e.accelerationX * 2;
      _ySpeed += e.accelerationY * 2;
    }
 
    //Gestion du mouvement du MovieClip Flashonaute
    private function moveFlashonaute():void
    {
      var nX:Number = mcFlashonaute.x + _xSpeed;
      var nY:Number = mcFlashonaute.y + _ySpeed;
 
      if (nX < 0)
      {
        mcFlashonaute.x = 0;
        _xSpeed = 0;
      }
      else if (nX > stage.stageWidth - mcFlashonaute.width)
      {
        mcFlashonaute.x = stage.stageWidth - mcFlashonaute.width;
        _xSpeed = 0;
      }
      else
      {
        mcFlashonaute.x += _xSpeed;
      }
 
      if (nY < 0)
      {
        mcFlashonaute.y = 0;
        _ySpeed = 0;
      }
      else if (nY > stage.stageHeight - mcFlashonaute.height)
      {
        mcFlashonaute.y = stage.stageHeight - mcFlashonaute.height;
        _ySpeed = 0;
      }
      else
      {
        mcFlashonaute.y += _ySpeed;
      }
    }
 
  }
 
}
A VOIR AUSSI
COMMENTAIRES



* champs obligatoires

Squale

Excellente première application, merci beaucoup, tu n’aurais pas quelques conseils ou liens pour aller plus loin ? Merci beaucoup en tous cas.


yann kozon

Squale le principal conseil que je peux donner, est qu’il faut énormément optimiser l’application. Utiliser les Vector à la place des Array, supprimer tous les écouteurs non utilisés, éviter l’alpha…

Ces deux liens peuvent t’aider :
http://help.adobe.com/fr_FR/as3/mobile/index.html
http://www.bytearray.org/?p=1827

Je vais faire plusieurs tutorials sur la création d’appli iPhone et Android avec Flash, donc hésite pas à revenir sur le blog !


Squale

Un grand merci pour tes conseils et tes liens, je vais suivre ton blog qui est fort intéressant, un grand bravo pour ton travail.


Squale

Bonjour,

J’ai une petite question, je suis en train d’essayer de faire un petit jeu mais je bloque sur un problème, j’ai crée un espace de pad pour diriger mon personnage mais je n’arrive pas à gérer la pression maintenue sur un bouton.

J’ai mis :

right.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToPosition_3);

function fl_ClickToPosition_3(event:MouseEvent):void
{

hero.x -= 20;

}

C’est bien MOUSE_DOWN qu’il faut utiliser ?
Peux-tu m’aider ?


yannkozon

Bonjour,
Normalement avec le code actuel le « hero » se déplace à chaque « click ».
Tu peux utiliser MouseEvent.CLICK, ça fonctionne aussi.

Par contre si tu veux que la valeur de x change tant que la pression est maintenue, tu peux faire ça :

right.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
right.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);

function mouseDownHandler(e:MouseEvent):void
{
stage.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
}

function mouseUpHandler(e:MouseEvent):void
{
stage.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
}

function onEnterFrameHandler(e:Event):void
{
hero.x -= 20;
}