1 Comment programmer les animations Flash en ActionScript3.0 (ou AS3.0) Jean-Paul Stromboni SI4, Infographie cours Flash n°2, mai 2011 Objectif : montrer.

Slides:



Advertisements
Présentations similaires
[number 1-100].
Advertisements

Exposé Flash 3 - Tir aux canards - BRIGOLLE Mathieu GI04Printemps 07.
Interactivé: L'Action Script.
Gestion des événements (suite)
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
(Classes prédéfinies – API Java)
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Voisin-Polian : Introduction à Java 1 Introduction à Java - AWT - Frédéric VOISIN – Nicole POLIAN FIIFO - « Remise à Niveau »
Algorithme et structure de données
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Minimisation Techniques 1 Assimilation Algorithms: Minimisation Techniques Yannick Trémolet ECMWF Data Assimilation Training Course March 2006.
Publication Flash sur Internet et Transfert avec Dreamweaver COM3562 Communication Multimédia MARS 2011.
Connexion base de données
Chapitre IV Object, interfaces, classes imbriquées.
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Langage Oriente Objet Cours 4.
Cours du 19 octobre. POO-L3 H. Fauconnier2 E) Constructeurs et héritage Le constructeurs ne sont pas des méthodes comme les autres: le redéfinition na.
Master 1 SIGLIS java Lecteur Stéphane Tallard Chapitre 4 – Structures de contrôle.
Jeu de role interactif Axel MANGUY Enora GABORY. I - construction de la démarche et mise en œuvre des moyens Cahier des charges.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Historique de SystemC Regroupe 4 courants didées: SCENIC Project : Synopsys+UC Irvine Philips System-Level Data Types, VSIA SLD DWG IMEC, Hardware-Software.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
VOCABULAIRE. 1. Où vas-tu? Where are you going? 2. Je vais à…. I am going to…. 3. Je vais chez (+ person or pronoun) I am going to …house 4. Doù est-ce.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
Apprendre à programmer en créant un jeu video avec Scratch
PHP GTK PHP…au delà du Web Paris, 28 novembre 2001 Armel FAUVEAU GLOBALIS media systems.
Faculté I&C, Claude Petitpierre, André Maurer 1 Concepts dhéritage Héritage dimplémentation hasA Héritage de spécialisation isA.
Multi-Thread Jian-Yun Nie
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Badr Benmammar Formation Développeur Java Thread et Swing Badr Benmammar
Formation Développeur Java Applet et interfaces graphiques avec AWT
Java Swing.
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI2520 Le langage Scheme (2) Un langage de programmation fonctionnelle.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Première CTP le 4 décembre Nouvelle CTP depuis le 1 er février RTM milieu de cette année.
Différencier: NOMBRE PREMIER vs. NOMBRE COMPOSÉ
Modélisation des données Niveau conceptuel DON-2 V0-0.
Implémentation Ada Gestion de la mémoire. Put 20 L'affectation de Comptes (σ-modèle) La sémantique intuitive des comptes ne laisse guère de place à l'affectation.
USAM BRIDGE H O W E L L -CLASSIQUE
LES PILES ET FILES.
9 paires séries de 3 étuis ( n° 1 à 27 )
Tutorat en bio-informatique
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Séance Flash 2 TD SI28 du 16/04/07 Nadel Ben Ghmiss Bruno Prémartin.
Deuxième Exposé Si Nicolas Debeljak Sun Young Park.
FLASH SEANCE 2 Interaction avec Action Script. Action script Langage de programmation utilisé par Flash. Définir des propriétés, des actions des comportements.
** Flash séance 2 Action script. ** Action Script Ajoute de l’interactivité Permet de contrôler les clips  Langage de programmation orienté objet.
Flash 2 ème séance Interaction François Marliac Mickaël Moreira.
Flash MX – Séance 2 Interactions & ActionScript David Rapin Si28 P06.
 Flash : animations mais aussi interactions  ActionScript : langage de programmation multipliant les possibilités de dynamisme et d’interactivité d’un.
Réalisation d’un jeu de tir au canards. Page d’accueil Télécharger les fichiers sources. Importez les images parchemins et fond_shoot Insérer l’image.
Flash : deuxième séance Yannick Bresson Alessandro Camozzato Tien-Quang Tong 22/10/07.
EXPOSE FLASH 2 SI 28 24/10/2006 Delphine GODREAU Hélène PERRIER.
Sommaire : -A propos des images importées -Les boutons et l’interactivité dans la scène -Textes dynamiques -Les clips (les liaisons) -Les sons -Les composants.
L’interactivité avec ActionScript. ActionScript Langage de programmation de Flash qui permet de : Gérer des actions et des animations sur la scène Contrôler.
Gaëtan MARANZANA SI28-A04 Flash MX DEUXIEME EXPOSE.
Interface Tutorial Flash 2 Par Vincent ² SI28 – P06 Bibliothèque Composant s Panneau actions Barre d'outils Timeline.
BOUTET Antoine MARICOT Benoit ActionScript Flash Séance 2.
FLASH Séance 2 Xiaoliang Liang Morgane Le Nan SI28 P05.
Flash – séance 2 Interactions avec Action Script.
Lundi 20 octobre 2008Séance Flash 21 Séance Flash 2 ActionScript Cheikh DIEDHIOU Germain LEDRUT.
Transcription de la présentation:

1 Comment programmer les animations Flash en ActionScript3.0 (ou AS3.0) Jean-Paul Stromboni SI4, Infographie cours Flash n°2, mai 2011 Objectif : montrer comment on peut programmer linteractivité des animations Flash en ActionScript3.0 (AS3.0) À partir des exemples tirés du chapitre Game Elements de : ActionScript3 pour les jeux, de Gary Rosenzweig, chez PEARSON

2 Où placer les scripts en AS3.0 ? dans les images clés du scénario, – avec le panneau Actions (F9), –ou depuis un fichier.as extérieur #include "toto.as" plus du tout dans les symboles (comme dans AS1.0) plus dans les occurrences (comme dans AS2.0) dans des classes écrites en ActionScript3.0 : placées dans des fichiers extérieurs dextension.as, ces classes sont construites lors de la création du clip ou de l'animation : –associées à l'animation (e.g. le fichier MatchingGame5.as, associé à l'animationMatchingGame5.fla) –associées aux symboles tels le movieClip (cf. Card10.as, associé au Clip Card10 dans MatchingGame10.fla)

3 Comment associer une classe AS3.0 à une animation ou à un MovieClip (Clip) éditer

4 les types en ActionScript3.0 vous pouvez utiliser les types de base comme suit : –var nom:type= valeur; Number int, uint Boolean String vous pouvez créer des instances des symboles et classes fournis –var monClip:MovieClip=new MovieClip(); –SimpleButton –TextField –Timer, Sprite, Sound … vous pouvez créer des instances (occurrences) des symboles que vous avez définis sous la condition de les avoir exportés pour ActionScript (panneaux Liaisons ou Propriétés): –var c:Card10 = new Card10(); // cf. plus loin

5 Spécifier propriétés et méthodes : Avant AS3.0, les noms des propriétés débutaient par _ : _x, _y … En AS3, voici quelques propriétés et méthodes du Clip : –Propriétés : x,y scaleX, scaleY visibility, height, width, alpha, … –Méthodes : addEventListener(), gotoAndPlay(), gotoAndStop() addChild(), … Truc utile: saisir toto_mc. liste les extensions possibles pour le Clip, idem, avec _btn pour les boutons, _txt pour les textes, … sinon, utiliser l'aide sur MovieClip, TextField, SimpleButton, etc …

6 Détecter et traiter les évènements en AS3.0: addEventListener(event, method) addEventListener (event, method) installe un listener sur : –les évènements de la souris sur loccurrence playButton dun bouton : playButton.addEventListener(MouseEvent.CLICK,startGame); function startGame(event:MouseEvent) { gotoAndStop("playgame"); } –loccurrence flipBackTimer dun temporisateur (timer) flipBackTimer = new Timer(2000,1); flipBackTimer.addEventListener(TimerEvent.TIMER_COMPLETE,returnCards); flipBackTimer.start(); … function (returnCards) { … } –… Ne pas oublier que removeEventListener(event, method) efface le listener précédemment installé

7 comment AS3.0 contrôle les occurrences Deux possibilités : 1.Depuis une image clé : on utilise le nom d'occurrence fixé dans le panneau Propriétés. Par exemple : var gameScore:int; var gameTime:String; playButton.addEventListener(MouseEvent.CLICK,startGame); function startGame(event:MouseEvent) { gotoAndStop("playgame"); } stop(); 2.Depuis une classe Action Script : avec le nom de variable fixé lors de la création, par exemple dans Card10.as, pour créer et disposer la carte c var c:Card10 = new Card10(); // copy the movie clip c.stop(); // stop on first frame c.x = x*cardHorizontalSpacing+boardOffsetX; // set position c.y = … … addChild(c);

8 Créer et afficher une occurrence de texte exemple, création d'un champ de texte dynamique pour afficher le score (dans MatchingGame10.as du même ouvrage) : private var gameScoreField:TextField; // set up the score gameScoreField = new TextField(); addChild (gameScoreField); gameScore = 0; showGameScore(); // et il faut définir public function showGameScore() { gameScoreField.text = "Score: "+String(gameScore); } C'est une nouveauté d'AS3, toute occurrence créée est ajoutée dans la liste d'affichage (Display List) par la méthode addChild().

9 Gérer lempilement des calques avec addChild() la méthode addChild(objet) rajoute un objet sur la pile des objets déjà affichés, et incrémente un index : –index=0 : racine de l'animation –index >0 -> empilé au dessus de la racine var disque1:Shape= new Shape(); disque1.graphics.beginFill(0xff0000,1); disque1.graphics.drawCircle(50,50,40); addChild(disque1); addChildAt(object, i), place 'object' au niveau i removeChild(objet) supprime l'objet de la liste removeChild(disque1); chaque objet possède sa propre liste d'affichage, tel le Sprite …

10 Sprite est une nouvelle classe d'AS3.0, c'est un Clip réduit à une image qui sert de container. var container:Sprite=new Sprite(); container.graphics.beginFill(0xffcc00,1); container.graphics.drawRect(0,0,300,200); var disque1:Shape= new Shape(); disque1.graphics.beginFill(0xff0000,1); disque1.graphics.drawCircle(50,50,40); var disque2:Shape= new Shape(); disque2.graphics.beginFill(0x00ff00,1); disque2.graphics.drawCircle(70,70,40); var disque3:Shape= new Shape(); disque3.graphics.beginFill(0x0000ff,1); disque3.graphics.drawCircle(90,90,40); addChild(container); container.addChild(disque1); container.addChild(disque2); container.addChild(disque3); container.x+=50; container.y+=75; // si on modifie une ligne, le disque vert // est affiché au niveau 0 container.addChildAt(disque2, 0);

11 Créer un moteur d'animation (MoteurAnimation.fla) un moteur d'animation est une fonction exécutée à chaque nouvelle image, par exemple pour déplacer un objet : var hero:Hero = new Hero(); hero.x=50; hero.y=200; addChild(hero); // affichage de hero addEventListener(Event.ENTER_FRAME,animerHero); function animerHero (event:Event) { hero.x++; hero.gotoAndStop(hero.currentFrame+1); if (hero.currentFrame==hero.totalFrames) hero.gotoAndStop(1); } hero est une instance de la classe Hero, mais pour cela, le Clip Hero doit avoir été exporté pour ActionScript

12 Utiliser le temps (TimeBasedAnimation.fla) parfois, l'animation nécessite de respecter précisément l'écoulement du temps. Or, la cadence des images est imprécise (multitâche). On utilise alors lhorloge de lordinateur avec la fonction getTimer(). Par exemple : var lastTime:int = getTimer(); addEventListener(Event.ENTER_FRAME, animateBall); function animateBall(event:Event){ var timeDiff:int=getTimer()-lastTime; lastTime += timeDiff; ball.x += timeDiff*.1; } voir également PhysicsBasedAnimation.fla

13 Détecter les collisions (CollisionDetection.fla) addEventListener(Event.ENTER_FRAME, checkCollision); function checkCollision(event:Event) { // check the cursor location against the crescent if (crescent.hitTestPoint(mouseX, mouseY, true)) { messageText1.text = "hitTestPoint: YES"; } else { messageText1.text = "hitTestPoint: NO"; } // move star with mouse star.x = mouseX; star.y = mouseY; // test star versus crescent if (star.hitTestObject(crescent)) { messageText2.text = "hitTestObject: YES"; } else { messageText2.text = "hitTestObject: NO"; }

14 Utiliser la souris (MouseInput.fla) // create a text field to show mouse location var mouseLocText:TextField = new TextField(); mouseLocText.selectable = false; addChild(mouseLocText); // update mouse location addEventListener(Event.ENTER_FRAME, showMouseLoc); function showMouseLoc(event:Event) { mouseLocText.text = "X="+mouseX+" Y="+mouseY; } // create a new sprite mySprite with a circle drawn … // change alpha to 1 on rollover mySprite.addEventListener(MouseEvent.ROLL_OVER, rolloverSprite); function rolloverSprite(event:MouseEvent) { mySprite.alpha = 1;} // change alpha to.5 on rollout mySprite.addEventListener(MouseEvent.ROLL_OUT, rolloutSprite); function rolloutSprite(event:MouseEvent) { mySprite.alpha =.5;}

15 Déplacer un clip avec le clavier (MoveSprite.fla) var leftArrow:Boolean = false; var rightArrow:Boolean = false; var upArrow:Boolean = false; var downArrow:Boolean = false; // set event listeners stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedDown); stage.addEventListener(KeyboardEvent.KEY_UP, keyPressedUp); stage.addEventListener(Event.ENTER_FRAME, moveMascot); // set arrow variables to true function keyPressedDown(event:KeyboardEvent) { if (event.keyCode == 37) { leftArrow = true; } else if (event.keyCode == 39) { rightArrow = true; } else if (event.keyCode == 38) { upArrow = true; } else if (event.keyCode == 40) { downArrow = true; } // set arrow variables to false function keyPressedUp(event:KeyboardEvent) { if (event.keyCode == 37) { leftArrow = false; } else if (event.keyCode == 39) { rightArrow = false; } else if (event.keyCode == 38) { upArrow = false; } else if (event.keyCode == 40) { downArrow = false; } // move every frame function moveMascot(event:Event) { var speed:Number = 5; if (leftArrow) { mascot.x -= speed; } if (rightArrow) { mascot.x += speed; } if (upArrow) { mascot.y -= speed; } if (downArrow) { mascot.y += speed; }

16 Synchroniser un clip et un timer (UsingTimers2.fla) Hero est un clip qui contient 8 images Ce script placé dans l'image 1 fait marcher Hero à l'aide d'un Timer var hero:Hero = new Hero(); hero.x = 100; hero.y = 200; addChild(hero); var heroTimer:Timer = new Timer(80); heroTimer.addEventListener(TimerEvent.TIMER, animateHero); function animateHero(event:Event) { hero.x += 7; if (hero.currentFrame == 8) { hero.gotoAndStop(2); } else { hero.gotoAndStop(hero.currentFrame+1); } heroTimer.start();

17 Jouer des sons (PlayingSounds.fla) // set up buttons button1.addEventListener(MouseEvent.CLICK, playLibrarySound); button2.addEventListener(MouseEvent.CLICK, playExternalSound); // load external sound so it is ready var sound2:Sound = new Sound(); var req:URLRequest = new URLRequest("PlayingSounds.mp3"); sound2.load(req); function playLibrarySound(event:Event) { var sound1:Sound1 = new Sound1(); var channel:SoundChannel = sound1.play(); } function playExternalSound(event:Event) { sound2.play(); }

18 utiliser une entrée textuelle (TextInput.fla) var myInput:TextField = new TextField(); myInput.type = TextFieldType.INPUT; myInput.defaultTextFormat = inputFormat; myInput.x = 10; myInput.y = 10; myInput.height = 18; myInput.width = 200; myInput.border = true; stage.focus = myInput; addChild(myInput); myInput.addEventListener(KeyboardEvent.KEY_UP, checkForReturn); function checkForReturn(event:KeyboardEvent) { if (event.charCode == 13) { acceptInput(); } function acceptInput() { var theInputText:String = myInput.text; trace(theInputText); removeChild(myInput); }

19 Scruter l'entrée clavier (KeyboardInput.fla) stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownFunction); function keyDownFunction(event:KeyboardEvent) { keyboardText.text = "Key Pressed"+String.fromCharCode(event.charCode); if (event.charCode == 32) { spacebarPressed = true; spacebarText.text = "Spacebar is DOWN."; } stage.addEventListener(KeyboardEvent.KEY_UP, keyUpFunction); function keyUpFunction(event:KeyboardEvent) { if (event.charCode == 32) { spacebarPressed = false; spacebarText.text = "Spacebar is UP."; } sous réserve de créer spaceBarText : comment ?

20 'Encapsuler une classe ActionScript l'animation MatchingGame5.fla : –tient sur une image clé unique –et est associée au script MatchingGame5.as qui définit et la classe du même nom MatchingGame5 –le constructeur est exécuté lors de la création de l'animation, l'animation MatchingGame10.fla, par contre : –tient sur trois images clés : accueil, jeu, et gameover –et n'est pas associée à une classe Actionscript. –mais le clip MatchingGame10 transparent dans l'image 2 est associé à MatchingGame10.as et encapsule la classe MatchingGame10 qui construit le jeu lors de son apparition à la deuxième image. autre technique : associer MatchingGame10.as à l'animation, mais sans constructeur et avec une fonction startGame() qui sera exécutée à l'image 2 pour construire le panneau de jeu

21 Exemple de la classe MatchingGame10 package [nomOptionnel] { import flash.display.*; import flash.events.*; import flash.text.*; import flash.utils.getTimer; import flash.utils.Timer; import flash.media.Sound; import flash.media.SoundChannel; public class MatchingGameObject10 extends MovieClip { private static const boardWidth:uint = 6; private var gameScoreField:TextField; private var firstCard:Card10; //variables private var flipBackTimer:Timer; // timer to return cards to face-down var theFirstCardSound:FirstCardSound = new FirstCardSound(); // set up sounds … // initialization function public function MatchingGameObject10():void { // constructeur de la classe … } public function playSound(soundObject:Object) { var channel:SoundChannel = soundObject.play(); } }

22 le constructeur de la classe MatchingGame10

23 Utiliser la technique "du symbole unique" les 18 cartes de MatchingGame sont réunies dans un clip unique nommé Card10, cest la méthode du symbole unique. choisir une carte 'i' revient à faire gotoAndStop(i) on retrouve cette technique dans d'autres jeux, par exemple pour un personnage dans un Role Playing Game (RPG) qui doit tour à tour marcher, courir, frapper, nager … on stocke alors toutes ces actions dans un même clip (symbole unique) La classe suivante associée au clip Card10 réalise lanimation lors du retournement des cartes

24 Comment écrire une classe ActionScript3.0 Card10.as