SWFAction

SWFAction -- Crée une nouvelle action.

Description

new swfaction ( string script)

swfaction( ) crée une nouvelle action , et compile le script script .

La syntaxe du script est basée sur le langage C , mais il utilise aussi beaucoup de notions propres à SWF : le bytecode SWF est trop simpliste pour faire l' essentiel de ce que l 'on veut . Par exemple , il n ' est pas possible de faire des fonctions sans descendre profondément dans les entrailles de la machine , car le bytecode de saut est écrit en dur . Pas moyen de pousser une adresse dans la pile , ou de dépiler - Chaque fonction doit savoir exactement elle retourne .

Alors , que reste-t-il ? Le compilateur reconnaît les mots suivants :



Il n ' y a pas de type de données : toutes les valeurs de SWF sont stockées comme des chaînes de caractères . Les fonctions suivantes peuvent être utilisées dans les expressions :

time()

Retourne le nombre de milli-secondes depuis le début de l ' animation .

random(seed)

Retourne un nombre pseudo-aléatoire , entre 0 et seed .

length(expr)

Retourne la taille de l ' expression donnée .

int(number)

Retourne le nombre number , arrondi à l ' entier inférieur le plus proche .

concat(expr, expr)

Retourne la concaténation des deux expressions .

ord(expr)

Retourne le code ASCII du caractère expr .

chr(num)

Retourne le caractère pour le code ASCII num .

substr(string, location, length)

Retourne la sous-chaîne , extraite de string , de longueur length et commençant au caractère location .



De plus , les commandes suivantes sont accessibles :

duplicateClip(clip, name, depth)

Duplique le sprite nommé clip . La nouvelle animation a le nouveau nom name et la profondeur depth .

removeClip(expr)

Supprime l ' animation nommée expr .

trace(expr)

Ecrit l' expression expr dans le fichier de d 'historique . Il est peut probable que le navigateur ou le lecteur ne fasse quoi que ce soit avec .

startDrag(target, lock, [left, top, right, bottom])

Comment à déplacer l ' animation target . L' argument lock indique si le déplacement verrouille la souris (utilisez 0 , FALSE ) ou 1 ( TRUE ) ) . Les paramètres optionnels délimitent la zone de déplacement .

stopDrag()

Cesse le déplacement de l ' animation .

callFrame(expr)

Appelle l ' image expr comme une fonction .

getURL(url, target, [method])

Charge l' URL url dans l'objet target . target peut être l'image courante (je pense ) ou une des valeurs magiques "_level0 " (remplace l'animation courante ) ou "_level1 " (charge une nouvelle animation à la place de la courante ) . L ' argument optionnel method peut être post ou get , si vous voulez envoyer des variables au serveur .

loadMovie(url, target)

La même chose que ci-dessus , plus ou moins . En fait , je ne sais pas trop quelle est la différence .

nextFrame()

Va à l ' image suivante .

prevFrame()

Va à l ' image précédente .

play()

Joue l ' animation .

stop()

Cesse de jouer l ' animation .

toggleQuality()

Passe de haute en basse qualité ( et vice-versa ) .

stopSounds()

Cesse de jouer les sons .

gotoFrame(num)

Va à l ' image numéro num . Les images sont numérotées à partir de 0 .

gotoFrame(name)

Va à l ' image nommée name . Ce qui est carrément cool , car les labels ne sont pas encore supportés pour les images .

setTarget(expr)

Modifie le contexte de l ' action . C' est ce qu'ils disent , mais je n'ai pas trop d 'idées là-dessus .

Et il y a un truc bizarre : l'expression frameLoaded(num) peut être utilise dans les conditions if et dans les boucles while pour vérifier si une image a été chargée. En tous cas, c'est ce qu'il est supposé faire, mais je ne l'ai jamais testé, et je doute sérieusement que cela fonctionne. Vous pouvez utiliser plutôt /:framesLoaded à la place.

Les sprites ont des propriétés . Vous pouvez les lire toutes ( vraiment ? ) , en modifier quelques unes . Les voici :

Modifier la position d'un sprite est aussi simple que /box.x = 100; . Pourquoi le slash initial? C'est comme cela que Flash garde la trace des sprites dans les animations, un peu comme des fichiers sous Unix. Si le sprite qui s'appelle box a lui-même un autre sprite appelé biff, vous pouvez y accéder avec la commande /box/biff.x = 100; . En tous cas, ça marche pour moi. Corrigez moi si c'est faux!.

Cet exemple simple va déplacer le gros carré rouge dans la fenêtre .

Exemple 1 . Exemple avec swfaction( )






Cet exemple suit votre souris sur l ' écran .

Exemple 2 . Exemple avec swfaction( )

 
 ?php

 
$m

 
=

 
new

 
SWFMovie(

 
)

 
;

 
$m

 
-

 
setRate(36.0)

 
;

 
$m

 
-

 
setDimension(1200

 
,

 
800)

 
;

 
$m

 
-

 
setBackground(0

 
,

 
0

 
,

 
0)

 
;

 
/

 
*

 
sprite

 
de

 
suivi

 
de

 
souris

 
:

 
vide

 
,

 
mais

 
il

 
suit

 
la

 
souris

 
de

 
manière

 
à

 
ce

 
que

 
nous

 
connaissions

 
ses

 
coordonnées*

 
/

 
$i

 
=

 
$m

 
-

 
add(new

 
SWFSprite())

 
;

 
$i

 
-

 
setName('mouse')

 
;

 
$m

 
-

 
add(new

 
SWFAction(

 
"

 
startDrag('

 
/

 
mouse'

 
,

 
1)

 
;

 
/

 
*

 
'1

 
'

 
signifie

 
verrouiller

 
la

 
souris

 
*

 
/

 
"))

 
;

 
/

 
*

 
On

 
peut

 
tout

 
simplement

 
virer

 
l'anti-aliasing

 
,

 
car

 
il

 
n'y

 
a

 
que

 
des

 
gros

 
carrés

 
,

 
finalement

 
*

 
/

 
$m

 
-

 
add(new

 
SWFAction(

 
"

 
this.quality

 
=

 
0

 
;

 
"))

 
;

 
/

 
*

 
boîte

 
de

 
morphing

 
*

 
/

 
$r

 
=

 
new

 
SWFMorph()

 
;

 
$s

 
=

 
$r

 
-

 
getShape1()

 
;

 
/

 
*

 
Notez

 
que

 
ce

 
n

 
'est

 
pas

 
pratique

 
pour

 
les

 
formes

 
habituelles

 
.




 
Aucune

 
idée

 
de

 
pourquoi

 
*

 
/

 
$s

 
-

 
setLeftFill(

 
$s

 
-

 
addFill(0xff

 
,

 
0xff

 
,

 
0xff))

 
;

 
$s

 
-

 
movePenTo(-40

 
,

 
-40)

 
;

 
$s

 
-

 
drawLine(80

 
,

 
0)

 
;

 
$s

 
-

 
drawLine(0

 
,

 
80)

 
;

 
$s

 
-

 
drawLine(-80

 
,

 
0)

 
;

 
$s

 
-

 
drawLine(0

 
,

 
-80)

 
;

 
$s

 
=

 
$r

 
-

 
getShape2()

 
;

 
$s

 
-

 
setLeftFill($s

 
-

 
addFill(0x00

 
,

 
0x00

 
,

 
0x00))

 
;

 
$s

 
-

 
movePenTo(-1

 
,

 
-1)

 
;

 
$s

 
-

 
drawLine(2

 
,

 
0)

 
;

 
$s

 
-

 
drawLine(0

 
,

 
2)

 
;

 
$s

 
-

 
drawLine(-2

 
,

 
0)

 
;

 
$s

 
-

 
drawLine(0

 
,

 
-2)

 
;

 
/

 
*

 
sprite

 
contenant

 
la

 
boîte

 
de

 
morphing

 
-

 
c'est

 
juste

 
un

 
scénario

 
avec

 
une

 
boîte

 
de

 
morphing

 
*

 
/

 
$box

 
=

 
new

 
SWFSprite()

 
;

 
$box

 
-

 
add(new

 
SWFAction(

 
"

 
stop()

 
;

 
"))

 
;

 
$i

 
=

 
$box

 
-

 
add($r)

 
;

 
for($n=0

 
;

 
$n

 
=20

 
;

 
++$n

 
)

 
  {

 
$i

 
-

 
setRatio($n

 
/

 
20)

 
;

 
$box

 
-

 
nextFrame()

 
;

 
  }

 
/

 
*

 
ce

 
conteneur

 
nous

 
permet

 
d'utiliser

 
la

 
même

 
action

 
plusieurs

 
fois

 
*

 
/

 
$cell

 
=

 
new

 
SWFSprite()

 
;

 
$i

 
=

 
$cell

 
-

 
add($box)

 
;

 
$i

 
-

 
setName('box')

 
;

 
$cell

 
-

 
add(new

 
SWFAction(

 
"

 
setTarget('box')

 
;

 
/

 
*

 
...x

 
signifie

 
abscisse

 
du

 
parent

 
,

 
c'est-à-dire

 
(.

 
.).x

 
*

 
/

 
dx

 
=

 
(

 
/

 
mouse.x

 
+

 
random(6)-3

 
-

 
...x)

 
/

 
5

 
;

 
dy

 
=

 
(

 
/

 
mouse.y

 
+

 
random(6)-3

 
-

 
...y)

 
/

 
5

 
;

 
gotoFrame(int(dx*dx

 
+

 
dy*dy))

 
;

 
"))

 
;

 
$cell

 
-

 
nextFrame()

 
;

 
$cell

 
-

 
add(new

 
SWFAction(

 
"

 
gotoFrame(0)

 
;

 
play()

 
;

 
"))

 
;

 
$cell

 
-

 
nextFrame()

 
;

 
/

 
*

 
finalement

 
,

 
ajoutons

 
quelques

 
cellules

 
à

 
l'animation

 
*

 
/

 
for($x=0

 
;

 
$x

 
12

 
;

 
++$x

 
)

 
  {

 
for($y=0

 
;

 
$y8

 
;

 
++$y

 
)

 
    {

 
$i

 
=

 
$m

 
-

 
add($cell)

 
;

 
$i

 
-

 
moveTo(100*$x+50

 
,

 
100*$y+50)

 
;

 
    }

 
  }

 
$m

 
-

 
nextFrame()

 
;

 
$m

 
-

 
add(new

 
SWFAction(

 
"

 
gotoFrame(1)

 
;

 
play()

 
;

 
"))

 
;

 
header('Content-type

 
:

 
application

 
/

 
x-shockwave-flash')

 
;

 
$m

 
-

 
output()

 
;

 
?





La même chose que ci-dessus , mais en couleurs .

Exemple 3 . Exemple avec swfaction( )

 
?php

 
$m

 
=

 
new

 
SWFMovie(

 
)

 
;

 
$m

 
-

 
setDimension(11000

 
,

 
8000)

 
;

 
$m

 
-

 
setBackground(0x00

 
,

 
0x00

 
,

 
0x00)

 
;

 
$m

 
-

 
add(new

 
SWFAction(

 
"

 
this.quality

 
=

 
0

 
;

 
/

 
frames.visible

 
=

 
0

 
;

 
startDrag('

 
/

 
mouse'

 
,

 
1)

 
;

 
"))

 
;

 
/

 
/

 
sprite

 
de

 
suivi

 
de

 
souris

 
$t

 
=

 
new

 
SWFSprite()

 
;

 
$i

 
=

 
$m

 
-

 
add($t)

 
;

 
$i

 
-

 
setName('mouse')

 
;

 
$g

 
=

 
new

 
SWFGradient()

 
;

 
$g

 
-

 
addEntry(0

 
,

 
0xff

 
,

 
0xff

 
,

 
0xff

 
,

 
0xff)

 
;

 
$g

 
-

 
addEntry(0.1

 
,

 
0xff

 
,

 
0xff

 
,

 
0xff

 
,

 
0xff)

 
;

 
$g

 
-

 
addEntry(0.5

 
,

 
0xff

 
,

 
0xff

 
,

 
0xff

 
,

 
0x5f)

 
;

 
$g

 
-

 
addEntry(1.0

 
,

 
0xff

 
,

 
0xff

 
,

 
0xff

 
,

 
0)

 
;

 
/

 
/

 
gradient

 
$s

 
=

 
new

 
SWFShape()

 
;

 
$f

 
=

 
$s

 
-

 
addFill($g

 
,

 
SWFFILL_RADIAL_GRADIENT)

 
;

 
$f

 
-

 
scaleTo(0.03)

 
;

 
$s

 
-

 
setRightFill($f)

 
;

 
$s

 
-

 
movePenTo(-600

 
,

 
-600)

 
;

 
$s

 
-

 
drawLine(1200

 
,

 
0)

 
;

 
$s

 
-

 
drawLine(0

 
,

 
1200)

 
;

 
$s

 
-

 
drawLine(-1200

 
,

 
0)

 
;

 
$s

 
-

 
drawLine(0

 
,

 
-1200)

 
;

 
/

 
/

 
on

 
en

 
fait

 
un

 
sprite

 
pour

 
utiliser

 
la

 
fonction

 
multColor(

 
)

 
$p

 
=

 
new

 
SWFSprite()

 
;

 
$p

 
-

 
add($s)

 
;

 
$p

 
-

 
nextFrame()

 
;

 
/

 
/

 
Ajoute

 
la

 
forme

 
ici

 
,

 
chaque

 
forme

 
dans

 
une

 
couleur

 
différente

 
$q

 
=

 
new

 
SWFSprite()

 
;

 
$q

 
-

 
add(new

 
SWFAction("gotoFrame(random(7)+1)

 
;

 
stop()

 
;"))

 
;

 
$i

 
=

 
$q

 
-

 
add($p)

 
;

 
$i

 
-

 
multColor(1.0

 
,

 
1.0

 
,

 
1.0)

 
;

 
$q

 
-

 
nextFrame()

 
;

 
$i

 
-

 
multColor(1.0

 
,

 
0.5

 
,

 
0.5)

 
;

 
$q

 
-

 
nextFrame()

 
;

 
$i

 
-

 
multColor(1.0

 
,

 
0.75

 
,

 
0.5)

 
;

 
$q

 
-

 
nextFrame()

 
;

 
$i

 
-

 
multColor(1.0

 
,

 
1.0

 
,

 
0.5)

 
;

 
$q

 
-

 
nextFrame()

 
;

 
$i

 
-

 
multColor(0.5

 
,

 
1.0

 
,

 
0.5)

 
;

 
$q

 
-

 
nextFrame()

 
;

 
$i

 
-

 
multColor(0.5

 
,

 
0.5

 
,

 
1.0)

 
;

 
$q

 
-

 
nextFrame()

 
;

 
$i

 
-

 
multColor(1.0

 
,

 
0.5

 
,

 
1.0)

 
;

 
$q

 
-

 
nextFrame()

 
;

 
/

 
/

 
Enfin

 
,

 
le

 
code

 
de

 
l'action

 
$p

 
=

 
new

 
SWFSprite()

 
;

 
$i

 
=

 
$p

 
-

 
add($q)

 
;

 
$i

 
-

 
setName('frames')

 
;

 
$p

 
-

 
add(new

 
SWFAction(

 
"

 
dx

 
=

 
(

 
/

 
:mousex

 
-

 
/

 
:lastx)

 
/

 
3

 
+

 
random(10)-5

 
;

 
dy

 
=

 
(

 
/

 
:mousey

 
-

 
/

 
:lasty)

 
/

 
3

 
;

 
x

 
=

 
/

 
:mousex

 
;

 
y

 
=

 
/

 
:mousey

 
;

 
alpha

 
=

 
100

 
;

 
"))

 
;

 
$p

 
-

 
nextFrame()

 
;

 
$p

 
-

 
add(new

 
SWFAction(

 
"

 
this.x

 
=

 
x

 
;

 
this.y

 
=

 
y

 
;

 
this.alpha

 
=

 
alpha

 
;

 
x

 
+=

 
dx

 
;

 
y

 
+=

 
dy

 
;

 
dy

 
+=

 
3

 
;

 
alpha

 
-=

 
8

 
;

 
"))

 
;

 
$p

 
-

 
nextFrame()

 
;

 
$p

 
-

 
add(new

 
SWFAction("prevFrame()

 
;

 
play()

 
;"))

 
;

 
$p

 
-

 
nextFrame()

 
;

 
$i

 
=

 
$m

 
-

 
add($p)

 
;

 
$i

 
-

 
setName('frames')

 
;

 
$m

 
-

 
nextFrame()

 
;

 
$m

 
-

 
add(new

 
SWFAction(

 
"

 
lastx

 
=

 
mousex

 
;

 
lasty

 
=

 
mousey

 
;

 
mousex

 
=

 
/

 
mouse.x

 
;

 
mousey

 
=

 
/

 
mouse.y

 
;

 
++num

 
;

 
if(num

 
==

 
11

 
)

 
num

 
=

 
1

 
;

 
removeClip('char

 
'

 
num)

 
;

 
duplicateClip(

 
/

 
frames

 
,

 
'char

 
'

 
num

 
,

 
num)

 
;

 
"))

 
;

 
$m

 
-

 
nextFrame()

 
;

 
$m

 
-

 
add(new

 
SWFAction("prevFrame()

 
;

 
play()

 
;"))

 
;

 
header('Content-type

 
:

 
application

 
/

 
x-shockwave-flash')

 
;

 
$m

 
-

 
output()

 
;

 
?





Cet exemple simple gère le clavier ( vous devrez cependant cliquer dans la fenêtre pour lui donner le focus , et vous devrez aussi laisser votre souris dans la fenêtre . Si vous savez comment faire cela automatiquement , dites-le moi ! ) .

Exemple 4 . Exemple avec swfaction( )

 
?php

 
/

 
*

 
Le

 
sprite

 
n'

 
a

 
qu'une

 
lettre

 
par

 
image

 
*

 
/

 
$p

 
=

 
new

 
SWFSprite()

 
;

 
$p

 
-

 
add(new

 
SWFAction("stop()

 
;"))

 
;

 
$chars

 
=

 
"abcdefghijklmnopqrstuvwxyz"

 
.

 
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

 
.

 
"1234567890!@#$%^

 
*()_+-=

 
/

 
[]{}|;:,

 
.

 
?`~"

 
;

 
$f

 
=

 
new

 
SWFFont("_sans")

 
;

 
for($n=0

 
;

 
$nremove($i)

 
;

 
$t

 
=

 
new

 
SWFTextField()

 
;

 
$t

 
-

 
setFont($f)

 
;

 
$t

 
-

 
setHeight(240)

 
;

 
$t

 
-

 
setBounds(600,240)

 
;

 
$t

 
-

 
align(SWFTEXTFIELD_ALIGN_CENTER)

 
;

 
$t

 
-

 
addString($c)

 
;

 
$i

 
=

 
$p

 
-

 
add($t)

 
;

 
$p

 
-

 
labelFrame($c)

 
;

 
$p

 
-

 
nextFrame()

 
;

 
  }

 
/

 
*

 
région

 
de

 
clic

 
pour

 
le

 
bouton

 
:

 
toute

 
la

 
fenêtre

 
*

 
/

 
$s

 
=

 
new

 
SWFShape()

 
;

 
$s

 
-

 
setFillStyle0($s

 
-

 
addSolidFill(0

 
,

 
0

 
,

 
0

 
,

 
0))

 
;

 
$s

 
-

 
drawLine(600

 
,

 
0)

 
;

 
$s

 
-

 
drawLine(0

 
,

 
400)

 
;

 
$s

 
-

 
drawLine(-600

 
,

 
0)

 
;

 
$s

 
-

 
drawLine(0

 
,

 
-400)

 
;

 
/

 
*

 
le

 
bouton

 
s'assure

 
des

 
touches

 
pressées

 
,

 
et

 
envoie

 
le

 
bon

 
sprite

 
à

 
l'image

 
de

 
droite

 
*

 
/

 
$b

 
=

 
new

 
SWFButton()

 
;

 
$b

 
-

 
addShape($s

 
,

 
SWFBUTTON_HIT)

 
;

 
for($n=0

 
;

 
$naddAction(new

 
SWFAction(

 
"

 
setTarget('

 
/

 
char')

 
;

 
gotoFrame('$c')

 
;

 
")

 
,

 
SWFBUTTON_KEYPRESS($c))

 
;

 
  }

 
$m

 
=

 
new

 
SWFMovie()

 
;

 
$m

 
-

 
setDimension(600,400)

 
;

 
$i

 
=

 
$m

 
-

 
add($p)

 
;

 
$i

 
-

 
setName('char')

 
;

 
$i

 
-

 
moveTo(0,80)

 
;

 
$m

 
-

 
add($b)

 
;

 
header('Content-type

 
:

 
application

 
/

 
x-shockwave-flash')

 
;

 
$m

 
-

 
output()

 
;

 
?