CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Flash] Les variables dans les fonctions

Archipel
Archipel
Niveau 5
22 juin 2007 à 19:46:25

bonjour a tous,

j´ai encore un petit probleme pour acceder a mes variables au sein d´une fonction.
Un exemple vos mieux qu´un long discours :

num = 1
carte1 = [..]

Quand je suis pas dans une fonction je fais
_root[´carte´+num]
Mais lorsque je suis dans une fonction, les variables sont "jetables"(je connais pas le terme exact).

Question, que faut il que je mette a la place de root :question:

Merci d´avance a ceux qui voudront bien me repondre !

fil_razorback
fil_razorback
Niveau 10
22 juin 2007 à 20:01:31

Le bon mot pour "jetable" est je crois "local" ou "temporaire" (je suis pas fortiche en vocabulaire ^^).

En tout cas, ça devrait marcher en remplaçant ton _root par this

Petite note en passant, l´usage de _root est déconseillé d´une manière générale. Si tu inclus ensuite ton swf dans un autre, par exemple pour faire un preloader, ça risque de mettre le bazar et t´oblige à utiliser des lockroot.

Archipel
Archipel
Niveau 5
22 juin 2007 à 20:10:19

Ca ne marche pas, j´ai oublié de préciser que ce n´était pas dans une classe mais dans le root.

Sinon, tu pourrai expliciter ta "petite note" s´il te plait, ca m´interesse :)

luxregina
luxregina
Niveau 10
22 juin 2007 à 20:24:29

Parce qu´un Flash appele par un autre prend la "root" de celui ci - donc tu perds les references du fichier inclu.

---

Tout depend ou est declaree ta variable ? encore une fois, ta question n´est pas assez claire pour pouvoir y repondre.

d´ordre general, fais bien attention au point ou tu es lorsque tu appelle ta variable : tu ne peux appeler Num, qui si tu es au _level0 (si c´est la que tu l´a declare ) ...cela veut dire qui si tu l´appelle de _level0.movieClip1, il faut appeler _parent.num, ou _level0.num, etc ...

Archipel
Archipel
Niveau 5
22 juin 2007 à 20:43:43

Rien n´est assez clair pour toi luxreg :)
A vrai dire je déclare les deux dans la fonction.
Pour faire vraiment simple :
function inutile(nombre:Number)
{
age1 = 3;
age2 = 6;
age3 = 9;
return _root[´age´+nombre];
}

Je ne sais toujours pas par quoi remplacer _root, que ce soit une fonction (ou pas en suivant vos conseils).

Archipel
Archipel
Niveau 5
22 juin 2007 à 20:46:43

Sinon, je crois que vient de trouver une solution pour les deux problemes :
Je crée un objet "ListeVariables"

function inutile(nombre:Number)
{
ListeVariables = new Object();
ListeVariables.age1 = 3;
ListeVariables.age2 = 6;
ListeVariables.age3 = 9;
return ListeVariables[´age´+nombre];
}

luxregina
luxregina
Niveau 10
22 juin 2007 à 21:00:42

si je demande plus de clarte, c´est que pour repondre, faut savoir ou c´est declare, et d´ou c´est appele :)

pour ton exemple

function inutile(nombre:Number)
{
age1 = 3;
age2 = 6;
age3 = 9;
//return _root[´age´+nombre];
trace(this["age"+nombre]);

devrait marcher...

}

luxregina
luxregina
Niveau 10
22 juin 2007 à 21:03:22

ceci dit, j´imagine que ta fonction est un exemple, car elle n´a pas grand sens a mes yeux :)

Archipel
Archipel
Niveau 5
22 juin 2007 à 21:40:31

Tiens bah ca marche, j´avais déja essayé aprés que razorback m´ai donné la solution (la même) mais ca ne marchait pas :ouch2:

Mais bon, probleme résolu !
merci a vous deux

Euh non pas tout a fait, en dehors des fonctions, je fais comment pour remplacer _root afin de mettre un eventuel preloader ?

Je peux utiliser ma technique avec l´objet ListeVariables ?

luxregina
luxregina
Niveau 10
22 juin 2007 à 22:12:34

au lieu d´utiliser _root, ou _level0, tu pourrais n´adresser que l´arborescence de tes variables ( _parent._parent)

Sinon, ce que je fais en general, c´est declarer un variable customPath = _level0 ( ou _root) et ensuite je n´utilise que celle ci comme prefixe, surtout dans les cas ou j´ai beaucoup de movieClips
Je cree autant de customPaths que j´ai de groupes
(imaginons une collection de sprites, a l´interieur d´un movieClip, cela done Tiles_customPath = _root.nomduMovieClip )

Cela me permet de deplacer mes groupes et de changer mes arborescences au besoin sans avoir a me recogner trop de lignes de code ...

Mais ce n´est qu´un exemple parmis beaucoup - et pas forcement le plus propre

Archipel
Archipel
Niveau 5
22 juin 2007 à 22:24:34

Je vois, je changerai tout ca un jour.

Sinon il y a un truc que je ne comprends pas et qui explique le fait que ca ne marchait pas tout a l´heure.
Quand je déclare une variable en mettant "var" devant :
var v1 = false;
this.v1 est undefined
Pourquoi ?

Et ma fonction inutile est... inutile :-)

luxregina
luxregina
Niveau 10
23 juin 2007 à 01:02:30

...

tu la declare ou ta variable ? et tu l´appelle d´ou ?

luxregina
luxregina
Niveau 10
23 juin 2007 à 01:08:47

v=false;
trace (this.v);

chez moi, marches parfaitement ...si le tout est declare et verife au meme endroit.

de meme, si tu prefere le typage AS2 :

var v:Boolean=false;
trace (this.v);

marche egalement parfaitement ...

luxregina
luxregina
Niveau 10
23 juin 2007 à 01:10:32

pour declarer une variable a l´aide de "var" il ne suffit pas de mettre juste var devant - il faut aussi renseigner le type.

Archipel
Archipel
Niveau 5
23 juin 2007 à 08:49:18

Non le probleme ne vient pas du fait que je ne renseigne pas le type :

var v=false;
trace (this.v);
marche aussi

Or dans les fonctions, ca ne marche plus du tout :(
Pourtant je ne vois pas ce que ca change de mettre var ou pas.

Mais bon, si il suffit d´enlever les var pour que tout reparer, ca me va aussi :)

Samir62300
Samir62300
Niveau 6
23 juin 2007 à 14:13:23

Et oui l´as et les prises de tête :p . Enfin bref un conseil rapide , utilise toujours trace pour t´aider . Ensuite n´utilise que trés rarement les _root utilise les idées de lux et fil ,et je trouve que le typage AS2 est mieux , ça permet toujours de moins se prendre la tête.

Ah et quand tu exportes fait toujours attention aux fonctions compatibles avec le projecteur . Je me comprend bref .

Ps: Sinon fil t´en est où sur Partisans ?? ?

Archipel
Archipel
Niveau 5
23 juin 2007 à 15:07:48

Ah et quand tu exportes fait toujours attention aux fonctions compatibles avec le projecteur . Je me comprend bref .
Oui mais moi pas trop :s

Tu dis que le AS2 est mieux, or c´est quand je met "var" que ca m´embrouille...

Une autre question, un peu HS, lorsqu´on appelle une fonction, j´ai l´impression que Flash appelle les arguments en commencant par le dernier :

a = [1,2]
test(a.shift(),a.shift())
function test(a1,a2)
{
trace a1->2
trace a2->1
}
C´est bizarre non ??

Samir62300
Samir62300
Niveau 6
23 juin 2007 à 15:32:56

Test avec a0 et a1

Samir62300
Samir62300
Niveau 6
23 juin 2007 à 15:38:39

Ah ben non toujours la même chose :s

luxregina
luxregina
Niveau 10
23 juin 2007 à 16:13:17

je ne comprends pas ta maniere d´extraire tes donnees : pourquoi ne passe tu pas par un for loop ? tu n´aurais pas de probleme

Le probleme vient de la maniere dont tu passes tes donnees a la fonction, puisque celle ci :

a = ["toto","titi"]
test(a.shift())
function test(a)
{
trace (a);
}

renvoie bien "toto" qui est le premier element de l´array

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment