Aide - Recherche - Membres - Calendrier
Version complète : [Centralisation] Flash/AS3
Forum PC INpact > Systèmes, logiciels et lignes de codes > Programmation et Création web > Création Web (HTML/CSS, PHP, Apache...)
Eagle1
CITATION
Adobe Flash (anciennement Macromedia Flash; nom original FutureSplash Animator), ou simplement Flash, se réfère à Adobe Flash Player et à un logiciel multimédia utilisé pour créer le contenu de Adobe Engagement Platform (tel qu’une application Internet, jeux ou vidéos). Flash Player, développé et distribué par Adobe Systems (qui acheta Macromedia en 2005), est une application client fonctionnant sur la plupart des navigateurs Web. Ce logiciel permet la création de graphiques vectoriels et de bitmap, un langage script appelé ActionScript et un stream bi-directionnel de l’audio et vidéo.


La dernière version du logiciel est Flash CS3. Elle permet de programmer en ActionScript 3 derrière ses animations, langage largement plus appronfondi que l' AS2.

Une application créé par CS3 ne peut être lu par Flash 8.


Documentation

Adobe, sur son site met à disposition une très grosse doc : Ici
Avec principalement cette section sur l'utilisation du logiciel en lui-même : ici
Et cette fois la documentation AS3 : ici

Tutoriaux

Une ressource monstrueuse, encore par Adobe: ici
C'est plein de tutos vidéo sur l'utilisation de Flash (et des autres logiciels adobe d'ailleurs)

Encore une autre ressource bien fournit, le site de MediaBox : ici

Référencement d'un site Flash

ça arrive icon_mrgreen.gif


Liens divers


http://www.flashxpress.net/
gros site avec un bon forum

http://www.bases-as3.fr/
un bon blog

un site qui explique des trucs fondamentaux sur le contrôle d'une anim flash

réservé à venir la F.A.Q.
Eagle1
F.A.Q.

Comment faire un lien vers une page web ?

C'est super simple !
Il faut utiliser la fonction navigateToURL(urlrequest(),"target");

CODE
var monadresse:URLRequest = new URLRequest("votreadresse");
      navigateToURL(monadresse,"_blank");


Comment déclencher un évènement ?

C'est bien beau de faire un lien, mais encore faut-il qu'il s'exécute à un moment donné...
Pour ça,il va falloir ajouter un écouteur d'évènement sur une occurence présente sur la scène.
Créez un champ texte sur la scène et nommez le "monlien"

CODE
monlien.addEventListener(MouseEvent.MOUSE_CLICK,jefaismonlien);
      function jefaismonlien (evt:MouseEvent)
      {
          var monadresse:URLRequest = new URLRequest();
          navigateToURL(monadresse,"_blank");  
      }


avec ce code, lorsqu'on clique sur le texte, ça ouvre une fenêtre à l'adresse indiqué.
J'utilise ici un évènement de type souris, il y en a plein : MOUSE_OVER,MOUSE_OUT...
On a aussi les évènement de type KEYBOARD, et plus généralement la classe Event qui contient tous les évènement reconnu par AS3, cherchez son aide dans la doc de Flash !



Quelque chose qui suit la souris ...

On va ici utilisé un textfield avec une indication qui suit la souris
on créé d'abord le textfield
CODE
var aide:TextField = new TextField();
   aide.width=160;
   aide.height=40;
   aide.x=100;
   aide.y=150;
   aide.multiline=true;
   aide.wordWrap=true;
   aide.border=true;
   aide.background=true;
   var bgcolor:uint = 0xFF0000
   aide.backgroundColor=bgcolor;
   aide.htmlText="<font face=\"verdana\" color=\"FF0000\">Appuyez sur Espace pour agrandir le menu</font>";
   addChild(aide);


ensuite on récupère les coordonnées de la souris et on définit les coordonnées du textfield sur celle-ci
CODE
stage.addEventListener(MouseEvent.MOUSE_MOVE, bougeletexte);
   function bougeletexte (event:MouseEvent):void
   {
       aide.x=event.stageX+10;
       aide.y=event.stageY-10;
   }






Allegro
Bonne idée cette centralisation Eagle merci.gif

Juste une petite chose :

QUOTE (Eagle1 @ 11-07-2008 00:46:28) *
Une application créé par CS3 ne peut être lu par Flash 8.[/size]


Ce n'est pas tout à fait exact.

L'AS 3 n'est pas géré par Flash Player 8.

En revanche, les graphismes crées sous CS3 (en tout cas basiques ; peut-être pas avec des filtres ... à voir) sont reconnus par Flash Player 8, et le code en AS2 sera correctement éxécuté.
En ce qui concerne les animations, je n'ai jamais essayé, à tester.
Eagle1
ouai tu as raison
par contre il est fort probable qu'a l'avenir ça soit de plus en plus le cas

je m'y remet sérieusement je vais avoir plein de question pour toi, ça agrandira la FAQ icon_mrgreen.gif
Allegro
D'ac icon_mrgreen.gif

Je serai content de t'aider, si je le peux oui.gif
Eagle1
tiens j'ai une question !
je suis encore loin de la dans mon projet mais j'y pense à l'avance

j'ai dans ma base de donnée des urls d'images
une fois que mon anim flash a récupéré l'url de ces images, elle est capable de s'en servir comme un clip ?
Allegro
Tu peux utiliser un Movie Clip comme "contenant" d'une image grâce à addChild(). Cela te permet de la positionner et de la redimentionner.

Attention toutefois, pour que ton image soit bien positionnée dans le MC (Movie Clip), il faut que son point d'enregistrement (que l'on définit à la création du MC ... mais "enregistrement" n'est peut-être pas le terme exact transpi.gif) soit situé en haut à gauche.
Eagle1
bon la je commence icon_mrgreen.gif :

j'ai un fichier php qui me sors les infos nécessaire à afficher dans mon anim flash.
j'ai esayé de charger grâce à URLLoader et URLRequest mais çame charge le fichier etxtuellement (donc le code)

il y a une technique pour récupérer les variables d'un script php (puisqu'on peux envoyer d'une anim flash à un script...)

sinon je vais être obliger de faire php -> xml -> flash
Allegro
Je n'ai pas encore essayé avec du php, mais je crois bien que c'est possible. Par contre, je l'ai fait avec du javascript, avec ExternalInterface().
Yangzebul
QUOTE (Eagle1 @ 12-07-2008 18:40:32) *
bon la je commence icon_mrgreen.gif :

j'ai un fichier php qui me sors les infos nécessaire à afficher dans mon anim flash.
j'ai esayé de charger grâce à URLLoader et URLRequest mais çame charge le fichier etxtuellement (donc le code)

il y a une technique pour récupérer les variables d'un script php (puisqu'on peux envoyer d'une anim flash à un script...)

sinon je vais être obliger de faire php -> xml -> flash


SWX : format natif d'échange de données de flash

http://swxformat.org/documentation/swx-php


Allegro
Est-ce que ça marche avec l'AS 3 ?
Yangzebul
J'ai jamais essayé mais cela m'ettonerai fortement que ce ne le soit pas.

Edit : hummm, finalement je suis plus si sûr... apparemment l'assembleur Flash 9 serait en préparation depuis décembre 2006 mais toujours pas finalisé. Il semblerait que d'autres formats concurrents aient ébranlés SWX.

http://www.davidarno.org/2007/12/13/has-ad...ust-killed-swx/
Allegro
Dommage frown.gif

Eagle, peux-tu nous poster ton code là ? (passage php -> flash)
Yangzebul
Enfin "dommage" pour eux oui, mais pour nous non.

Tu peux toujours utiliser AMFPHP surtout maintenant que le format AMF est normalisé par Adobe (cf. le lien plus haut). Donc en fait ce n'est pas dommage, c'est encore mieux !

Eagle1
j'ai trouvé un petit truc que je suis en train de regarder :
CODE
var variables:URLVariables = new URLVariables();
variables.title = "AStorm for ever";
variables.text = "I love to write some basic tickets on my blog :)";

var request:URLRequest = new URLRequest("form.php");
request.data = variables;
request.method = URLRequestMethod.POST;

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.addEventListener(Event.COMPLETE, onXmlLoaded);
loader.load(request);

function onXmlLoaded(evt:Event):void
{
   var doc:XMLDocument = new XMLDocument();
   doc.ignoreWhite = true;
   doc.parseXML(loader.data as String);

   var title:String = doc.firstChild.childNodes[0].firstChild.nodeValue;
   var text:String = doc.firstChild.childNodes[1].firstChild.nodeValue;

   trace("title : "+title);
   trace("text : "+text);
}


çe me fait une erreur comme ça
c'est un cp d'un site c'est le week end je regarderai ça demain ^^

le fichier php :
CODE
<?
$title = $_POST["title"];
$text = $_POST["text"];

//actions diverses...

//renvoi sous forme XML
header ("Content-Type: text/xml");

echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
echo "<root>";
echo "<title>$title</title>";
echo "<text>$text</text>";
echo "</root>";
?>
Spaz001
pouquoi ne pas passer par LoadVars ?

Et autre question, le temps d appel de fonction est amélioré en AS3 ?
Eagle1
LoadVars c'est as2 marche pas en as3...
nemesis93_75
j'aimerais bien apprendre Flash, le language et la façon de faire, auriez vous un gros tutoriel, ou un livre?

merci d'avance langue.gif
Eagle1
mes meilleurs liens sont au dessus !
Allegro
Je connais très peu le PHP, donc je ne sais pas trop. Mais je vais essayer de le faire de mon côté, la question est intéressante icon_mrgreen.gif
Eagle1
j'ai abandonné l'idée de récup des variables php...


en faite je passe par un fichier xml, mon swf charge ce fichier et se sert des infos...

voila ce que je veux :
mon swf à charger par exemple 5 restaurants, avec pour chacun 1 nom et l'url d'une image

je voudrai afficher ça dans un composant TileList()

CODE
import fl.controls.TileList;
import fl.data.DataProvider;

var dp:DataProvider = new DataProvider();
dp.addItem({label:"Image 1", source:"http://www.helpexamples.com/flash/images/image1.jpg"});
dp.addItem({label:"Image 2", source:"http://www.helpexamples.com/flash/images/image2.jpg"});
dp.addItem({label:"Image 3", source:"http://www.helpexamples.com/flash/images/image3.jpg"});
dp.addItem({label:"Image 4", source:"http://www.aubergeduvillageblanzay.eu/images/restaurant2.jpg"});
dp.addItem({label:"Image 5", source:"http://www.aiguesvives.fr/IMG/jpg/salle_restaurant_aigues_viv.jpg"});



var myTileList:TileList = new TileList();
myTileList.dataProvider = dp;
myTileList.columnWidth = 100;
myTileList.rowHeight = 100;
myTileList.columnCount = 2;
myTileList.rowCount = 2;
myTileList.move(10, 10);
addChild(myTileList);

function pagesuivante(evt:MouseEvent) {
    link
    }
myTileList.addEventListener(MouseEvent.MOUSE_DOWN,pagesuivante)


je cherche un moyen pour que lorsqu'on clique sur 1 item du TileList, ça fasse 1 action (donc ouvrir les infos détaillé d'un restaurant ici)
vous voyez ce que je veux dire ?
Eagle1
arrete de poser des questions et de répondre après !!!


myTileList.addEventListener( Event.CHANGE, onChange );

function onChange(evt:Event) {
navigateToURL( new URLRequest( evt.target.selectedItem.source ), "_blank");
}
Allegro
Hi hi icon_mrgreen.gif

Eh ben moi, j'ai pas abandonné l'idée, et j'ai trouvé le moyen de faire passer une variable de PHP (fichier form.php) à Flash langue.gif

On part du fait que je crée en PHP une variable qui contient le nom de mon pseudo. Je veux faire passer le contenu de cette variable (mon pseudo quoi) à Flash.

Code PHP :

CODE
$name = "pseudo";
$value = "Allegro";

echo $name . "=" . urlencode($value);


Code AS3 :

CODE
var Request:URLRequest = new URLRequest ("http://localhost/form.php");
                
var loader:URLLoader = new URLLoader (Request);
loader.addEventListener(Event.COMPLETE, onComplete);            
        
function onComplete (event:Event):void
{
    var variables:URLVariables = new URLVariables(loader.data);
    trace(variables.pseudo);
}


Il ne reste qu'à publier la scène sous Flash, et hop ...

Maintenant, il faudrait trouver le passage de variables dans l'autre sens, de Flash vers PHP transpi.gif icon_mrgreen.gif
Eagle1
de flahs vers php ça marche niquel avec ce que tu fais j'ai déjà un truc qui marche !

j'avais un code qui ressemblai à ça mais j'arrivai pas à le faire marcher !
merci en tout cas ça peut être utile icon_mrgreen.gif

sinon pour moi le xml c'est mieux quand même, ça use moins la bdd langue.gif
Allegro
Ben comme ça, on a deux méthodes, c'est chouette ! icon_mrgreen.gif

A ++, je suis ton topic oui.gif
Eagle1
allez une petite

CODE
    var chargementXML:URLLoader = new URLLoader();// objet de chargement
    var fichier:URLRequest = new URLRequest("bdd.xml");// url du fichier chargé
    chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
    chargementXML.load(fichier);

    // chargement terminé du fichier xml

    function chargementComplet(pEvt:Event):void
    {   // on récupère notre xml

        var donnee:XML = new XML( pEvt.target.data );//la classe XML est une classe native de Flash, on la trouve dans le package Top Level.
        var restaurant:XMLList = donnee.elements(); //le document XML est constitué d'une liste d'éléments XML, en l'occurence ici, une liste de personnes
        var lol = "restaurant.php?id=" + restaurant.(nomrestaurant=evt.target.selectedItem.source).idresto;
        navigateToURL( new URLRequest(lol), "_blank");
        
        
    }


sur que tu comprend ce que je veux faire icon_mrgreen.gif

ce qui me pose problème c'est :
var lol = "restaurant.php?id=" + restaurant.(nomrestaurant=evt.target.selectedItem.source).idresto;

evt.target.selectedItem.source contient le nom du restaurant dont je cherche l'id
j'ai besoin donc qu'il me le trouve et qu'il me sorte uniquement ça
pour le moment voila le résultat que ma variable lol:
restaurant.php?id=<idresto>1</idresto><idresto>2</idresto><idresto>3</idresto>

pas terrible ^^

Eagle1
!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!

var lol = "restaurant.php?id=" + restaurant.(nomrestaurant==evt.target.selectedItem.label).idresto;
Allegro
Yaich, ça devient dur transpi.gif

Je vais regarder ça demain icon_mrgreen.gif

Edit : on s'est croisé ˆˆ, c'est bon alors ...
Eagle1
je suis un boulet icon_mrgreen.gif ^^

quand j'aurai finit tout ça et compris correctement je l'expliquerai bien dans la F.A.Q. la je suis un peu en mode test !
Allegro
Ben alors je suis un boulet aussi, car je la fais aussi de temps en temps, la faute du = au lieu de == transpi.gif

Y a pas de souci icon_mrgreen.gif
Eagle1
oh t'es la ce matin toi ^^
j'ai rempli un peu la FAQ

alors j'ai encore quelques question :
j'ai un composant TileList sur ma page. Je lui file le focus dès que la souris passe dessus. Comme ça un petit texte s'affiche et te dit : appuie sur espace pour agrandir le menu ^^

seulement ça marche pas sur firefox 3 (ça nécessite un clic sur le composant)... mais oui sous IE..
je vois pas moyen de contourner le truc...
a part que l'évènement KEYBOARD de la touche espace soit placé sur le document complet...

Toujours pour mon TileList, je cherche comment changer son style, y a une classe apparement mais je comprend rien à comment changer le style...

et dernièrement, c'est possible d'écouter MOUSE_MOVE sur la scène entière histoire de recup les coordonnée de la souris ?
Allegro
Bonjour Toi laugh_pci.gif icon_mrgreen.gif

Mets-moi le code pour ton TileList, je vais voir ce que ça donne chez moi (plus le code html)

Sinon, pour modifier le style, les méthodes se trouvent dans l'aide, dans les Properties de la classe TileList. Tu as par exemple rowCount, rowHeight ...
Pour modifier le rowHeight par exemple, le code sera le suivant :

CODE
var myTileList:TileList = new TileList();
myTileList.rowHeight = 100;


Pour les coordonnées de la souris sur un MOUSE_MOVE, c'est event.stageX et event.stageY, avec ça :

CODE
stage.addEventListener(MouseEvent.MOUSE_MOVE, action);

function action (event:MouseEvent):void
{
    trace(event.stageX); // coordonnées horizontales
        trace(event.stageY); // coordonnées verticales
}
Eagle1
icon_mrgreen.gif
merci pour la souris

CODE
import fl.controls.TileList;
import fl.data.DataProvider;
import fl.controls.ScrollBarDirection;

// on charge du xml

var chargementXML:URLLoader = new URLLoader();// objet de chargement
var fichier:URLRequest = new URLRequest("bdd.xml");// url du fichier chargé
chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
chargementXML.load(fichier);

// chargement terminé du fichier xml

function chargementComplet(pEvt:Event):void {   // on récupère notre xml

var donnee:XML = new XML( pEvt.target.data );//la classe XML est une classe native de Flash, on la trouve dans le package Top Level.
var restaurant:XMLList = donnee.elements(); //le document XML est constitué d'une liste d'éléments XML, en l'occurence ici, une liste de personnes


for each(var contact:XML in restaurant)//pour chaque noeud enfants dans la liste des personnes
{
    dp.addItem({label: contact.nomrestaurant, source: contact.imagepresent});

}
}

// on affiche le menu


var dp:DataProvider = new DataProvider();
dp.addItem({label: "lol", source: "t"});
dp.addItem({label: "Au caveau Nuitons", source: "t"});
var myTileList:TileList = new TileList();
myTileList.dataProvider = dp;
myTileList.columnWidth = 150;
myTileList.rowHeight = 120;
myTileList.columnCount =1;
myTileList.rowCount = 3;
myTileList.move(590, 131);
myTileList.direction = ScrollBarDirection.VERTICAL;
myTileList.verticalLineScrollSize=50;
addChild(myTileList);
myTileList.mouseFocusEnabled=true;


// petit text d'aide sur le menu
var aide:TextField = new TextField();
aide.width=300;
aide.height=20;
aide.x=100;
aide.y=150;
var testaide = "1";
aide.border=true;
aide.htmlText="<font face=\"verdana\">Appuyez sur \"Espace\" pour<br/> agrandir le menu</font>";
addChild(aide);
aide.visible=false;


myTileList.addEventListener(Event.CHANGE,choixfait);
myTileList.addEventListener(KeyboardEvent.KEY_DOWN,agrandir);
myTileList.addEventListener(MouseEvent.ROLL_OVER,textaide);
myTileList.addEventListener(MouseEvent.ROLL_OUT,removetextaide);

    
function textaide(evt:MouseEvent)
{
    myTileList.setFocus();
    if(testaide=="1")
    {
        aide.visible=true;
    }
    testaide="2";
}

function removetextaide(evt:MouseEvent)
{
    aide.visible=false;
    testaide="1";
}
    
function choixfait(evt:Event)
{
    
    var chargementXML:URLLoader = new URLLoader();// objet de chargement
    var fichier:URLRequest = new URLRequest("bdd.xml");// url du fichier chargé
    chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
    chargementXML.load(fichier);

    // chargement terminé du fichier xml

    function chargementComplet(pEvt:Event):void
    {   // on récupère notre xml

        var donnee:XML = new XML( pEvt.target.data );//la classe XML est une classe native de Flash, on la trouve dans le package Top Level.
        var restaurant:XMLList = donnee.elements(); //le document XML est constitué d'une liste d'éléments XML, en l'occurence ici, une liste de personnes
        var lol = "restaurant.php?id=" + restaurant.(nomrestaurant==evt.target.selectedItem.label).idresto;
        navigateToURL( new URLRequest(lol), "_blank");
        
        
    }
}

function agrandir(evt:KeyboardEvent)
{
    if(evt.keyCode==32)
    {
        aide.visible=false;
        myTileList.columnCount = 4;
        myTileList.rowCount = 3;
        myTileList.move(80, 131);
        addChild(myTileList);
    }
}


pour le style du tilelist il y a un truc plus poussé (omme tu peuxle oir les rowheight je les ai trouvé ^^).
regarde du côté de cellrenderer class, moi je pige pas
Allegro
OK. Je vais regarder ça oui.gif
Allegro
Alors, je pense que concernant le problème du TileList, il faut appliquer l'addEventListener au stage et pas au TileList.

Ce qui veut dire, au lieu d'avoir ceci :

CODE
myTileList.addEventListener(KeyboardEvent.KEY_DOWN,agrandir);


Je ferais ceci :

CODE
stage.addEventListener(KeyboardEvent.KEY_DOWN,agrandir);


Ce qui déclenche la modification du TileList dès que la touche espace est utilisée.

Pour le reste, je regarde tout à l'heure, promis icon_mrgreen.gif
Eagle1
pas pressé
j'y ai pensé à ça
j'ai essayé
seulement je sais pas comment donner le focus au stage
en tout cas quand j'appuie sur espace ça marche pas...
Allegro
C'est bizarre, parce que ça marche chez moi.

Le stage, normalement est toujours actif. Pas besoin de lui donner le focus.

Remarque, j'ai essayé avec moins de code. Si tu fais :

CODE
stage.addEventListener(KeyboardEvent.KEY_DOWN, action);

function action(event:KeyboardEvent)
{
   if(evt.keyCode==32)
  {
      myTileList.rowCount = 5;
  }
}


Ca doit marcher.

Après, je ne suis pas sûr que le addChild(myTileList) de la fonction agrandir soit nécessaire, car tu l'as déjà fait avant.

Mais c'est le texte "appuie sur espace pour agrandir le menu" qui pose problème exactement ? Ou la touche espace ?
Eagle1
en effet il est pas utile
c'est la touche espace qui pose le problème
quand je met le listener sur stage, ça nécessite un clic quelque part sur l'anim pour que je puisse appuyez sur espace
et setFocus(); marche pas sur stage

donc je lâche l'affaire je fais un bouton agrandir...

edit: pour ce qui est du skin du tile list je peux changer ça en modifiant ce qui est inclue dans la bibliothèque de flash niquel !
Allegro
mmm OK.

J'y pense, mais c'est peut-être pas ça ... j'ai remarqué la même chose (clic avant de pouvoir faire quoi que ce soit) sur Opera (le dernier sorti).
Eagle1
ça marche sans souci sous IE...
mais bon ^^
Eagle1
ahah gros casse tête la...
que j'ai résolu
regarde


sachant que le swfobject est le meilleur moyen dintégrer un swf et de référencer correctement

ça se récup comme ça:
var choix = root.loaderInfo.parameters.choix;
test.text=choix;
Allegro
Ah oui, il parait qu'il faut l'utiliser, personnellement je ne l'ai jamais fait transpi.gif

Il y a la détection aussi dedans ... moi je l'ai séparément.

Ca t'a résolu des problèmes ?
Yangzebul
Eagle1 : ton lien est obselete, cela fait à peu près 6 mois que SO est passé en v2. Après l'avoir essayer tu ne voudra plus jamais repasser sur la 1.5 : 

http://code.google.com/p/swfobject/

Sinon pour la petite histoire des librairies d'encapsulations, au départ SWF Object s'appelait Flash Object et possèdait un concurrent : UFO (Unidentified Flash Object). Cela a duré un moment jusqu'à ce que la deuxième génération de ces librairies se préparent et qu'arrive un troisième laron "SWF Fix" qui grâce à un article sur ALA à réussi à rescussité le projet SO et unifier les efforts des trois librairies.

Depuis le monde des flasheurs/javascripteurs baigne dans l'amour, la joie et le nutella.

Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.