Alors que Visual Basic accepte les procédures (Sub) et les fonctions (Function), ActionScript n'accepte que les Fonctions (Function)
function Machin()
{
}
Elle ne fait rien, ne renvoie rien. Elle s'appelle Machin. C'est la structure minimale d'une fonction.
Attention : Une fonction ne peut se trouver or d'un on, ou onClipEvent d'un bouton ou d'un clip. Elle se trouve soit DANS un on, ou onClipEvent, ou alors directement sur une image-clé.
Dans le livre "La bible Micro Application Flash MX", ils déconseillent
d'appeler une fonction qui n'a pas encore été "lue".
En d'autres termes, en mettant les fonctions dans le calque que vous appellerez
Actions, dans la première image, avant toute chose, ce problème
est réglé :
Dans la première et unique image clé d'un unique calque que vous appellerez Actions, placez ce code :
function Truc()
{
Youpi = 44
}
trace ("Youpi vaut : " + Youpi)
Truc()
trace ("Youpi vaut : " + Youpi)
Le résultat sera le suivant :
Youpi vaut : undefined
Youpi vaut : 44
La fonction est écrite avant le reste, certes, mais elle n'est pas exécutée pour la cause. Juste après, on essaie d'afficher la valeur d'une variable Youpi, qui est donc indéfinie. On appelle alors la fonction Truc, et juste après, en réaffichant la variable YOupi, on constate qu'elle a bien pris la valeur 44, assignée dans la fonction.
Attention : Si, par mégarde, vous avez deux fonctions de même nom, aucune erreur ne sera générée :
function Truc()
{
Youpi = 1
}
function Truc()
{
Youpi = 2
}
trace ("Youpi vaut : " + Youpi)
Truc()
trace ("Youpi vaut : " + Youpi)
Résultat :
Youpi vaut : undefined
Youpi vaut : 2
Une fonction peut renvoyer une valeur. Exemple :
function NombrePi()
{
return 3.14
}
trace (NombrePi())
Renvoie 3.14
S'il y a plus d'un return dans la fonction, celle-ci s'arrête sans poser de question au premier return, point barre. Par exemple :
function UnChiffre()
{
return 6
Bille = 33
return 7
}
trace (UnChiffre())
trace (Bille)
Dès que return 6 est atteint, la fonctiuon se termine, et donc, Bille n'est pas assignée à la valeur 33. Voici le résultat :
6
undefined
Attention : Les fonctions sont sensibles à la cassse :
function NombrePi()
{
return 3.14
}
trace (NombrePi())
trace (NOMBREpi())
Renverra :
3.14
undefined
Sans pour autant générer une erreur, d'ou danger !
Il suffit de mettre une variable entre parenthèses, comme ceci :
function Truc(Machin)
{
}
Pour l'appel de la fonction, c'est comme ceci :
Truc (33)
33 va se transférer dans le paramètre Machin.
function Truc(Machin)
{
return Machin + 1
}
trace(Truc(33))
Affichera :
34
Et si on omet le paramètre, il n'y a pas d'erreur, simplement la variable/paramètre Machin reste vide ::
function Truc(Machin)
{
return Machin + 1
}
trace(Truc())
Affichera :
Nan
On peut ainsi mettre autant de paramètres qu'on veut :
function Truc(Machin,
Bidule, Bazar, Tralala)
{
return Machin + Bazar
}
trace(Truc(22.5, "Marcel", 23*2))
Affichera :
68.5
Dans la page "Les variables", je parle du typage strict.
La fonction suivante double le paramètre :
function Doubler(Truc)
{
return Truc * 2
}
trace (Doubler (33)) //
affiche 66
trace (Doubler ("Tralala"))
// affiche Nan
AFin de générer une erreur, plus parlante pour le programmeur, on peut utiliser le typage strict :
function Doubler(Truc:Number)
{
return Truc * 2
}
trace (Doubler (33))
trace (Doubler ("Tralala"))
Cette fois, c'est la ligne trace (Doubler ("Tralala")) qui pose problème. En effet, ActionScript se fâche à l'exécution :
**Erreur**
Séquence = Séquence 1, calque = Calque 1, image = 1 :Ligne 7 :
Incompatibilité de types.
trace (Doubler ("Tralala"))
Et pour s'assurer que le retour de la fonction est un nombre et pas autre chose (return Truc * 2), on peut aussi "TypageStricter" le retour :
function Doubler(Truc:Number):Number
{
return Truc * 2
}
var AAA:Number
var BBB:String
AAA = Doubler(44)
BBB = Doubler(44) // C'est CA
qui pose problème.
**Erreur**
Séquence = Séquence 1, calque = Calque 1, image = 1 :Ligne 8 :
Incompatibilité de types dans l'instruction d'affectation : Number détecté
au lieu de String.
BBB = Doubler(44)
trace (CLICarre._X)
Vous obtiendrez l'affichage de la position horizontale en pixels de votre clip. Dans mon cas, c'est 158.
Essayez maintenant ceci :
function DonnePosition
(QuelObjet)
{
return QuelObjet._x
}
trace (DonnePosition(CLICarre))
Va afficher la même valeur. Voyez : on peut envoyer un clip en paramètre, et la fonction peut traiter ses propriétés.
---