Bonjour à tous!!
C'est la première fois que je postule sur ce forum!!
J'ai pris longtemps avant de me décider de poster chez vous car la je ne trouve pas la réponse à ma question.
Je suis en train de créer un petit simulateur de mage ( qui fais référence au jeu wow )
Pour l'instant tout est basique en période de test pour vérifier que toute les bases ne sont pas buggées pour pouvoir continuer dans mon programme!!
Le programme :
Nous avons 3 boutons à dispositions, chacun de ces boutons lance un sort "spécifique au bouton"!!
Le lancement du sort va faire apparaître une barre de chargement qui durera plus au moins long en fonction du sort!!
( jusque la tout va bien =) )
Quand le sort est envoyé ( fini le chargement ) il passe par une fonction qui va calculer les dégâts par rapport au stats du personnage ( bla bla bla ) et ensuite les afficher.
Avec le temps, le texte va défiler vers le haut tout en devenant de plus en plus transparent jusqu'à disparaitre!!
Coté technique :
Mes boutons ont pour action :
seul le nom de la magie varie pour le cas du bouton
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 on (press) { if ( _global.casting == false ) { _global.magiesort = "givrefeu"; _global.casting = true; anim_castbarre(_global.magiesort); } }
anim_castbarre est la fonction qui anime notre chargement :
sur le clip de la barre de chargement il y a :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 function anim_castbarre(sort) { _global.magiesort = sort; if ( sort == "givrefeu" ) { _global.temps = _global.tempsgivrefeu; } else if ( sort == "brulure" ) { _global.temps = _global.tempsbrulure; } else { _global.temps = _global.tempspyro; } _global.limitemax = cast.barrecast._x + limite; _global.deplacement = _global.limite / ( (_global.temps / 1000 ) * _global.imageparseconde ); cast._visible = true; _global.temps_debutcast = getTimer(); _global.tempsfin = _global.temps_debutcast + _global.temps; _global.anim = true; }
ps : pour l'effet chargement j'ai opté pour un déplacement de rectangle sous un masque pour pouvoir modifier la vitesse du chargement selon la vitesse du sort.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 onClipEvent (enterFrame) { if ( _global.anim == true ) { tempsecoule = getTimer(); tempsrestant = _global.tempsfin - tempsecoule; if ( tempsrestant > 0.00 ) { this.var_cast = tempsrestant / 1000; } else { this.var_cast = 0.0; } if ( _global.compteur < _global.limite ) { this.barrecast._x += _global.deplacement; _global.compteur += _global.deplacement; } else { _global.casting = false; delete cast.onEnterFrame; trace("Sort : " + _global.magiesort + " lancé"); trace("-------------"); _root.calculdegat(_global.magiesort); _global.anim = false; this.barrecast._x = _global.limitemax; this.barrecast._x = this.barrecast._x - _global.limite; this._visible = false; _global.compteur = 0; } } }
Nous voici à la fonction de calcul des dégâts calculdegat() :
à noter que je pense que la partie "switch" peut se permettre une optimisation du code au vu de la répétition, mais comme je n'ai pas encore trouver comment créer des pointeurs pour garder en référence les clips que j'attache j'en suis resté pour l'instant à la méthode fatidique...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 function calculdegat(sort) { if ( sort == "givrefeu" ) { degatnormal = Math.round(( _global.upgivrefeu + 1.0 ) * ( random(_global.givrefeurandom) + _global.givrefeudebut + _global.bonusdegat*_global.givrefeucoeff )); if ( random(10000) <= ( _global.critique + _global.critiquegivrefeu ) * 100 ) { degatfinal = degatnormal * 2.3; } else { degatfinal = degatnormal; } } else if ( sort == "brulure" ) { degatnormal = Math.round(( _global.upfeu + 1.0) * ( random(_global.brulurerandom) + _global.bruluredebut + _global.bonusdegat*_global.brulurecoeff )); if ( random(10000) <= ( _global.critique + _global.critiquebrulure ) * 100 ) { degatfinal = degatnormal * 1.5; } else { degatfinal = degatnormal; } } else { degatnormal = Math.round(( _global.upfeu + 1.0) * ( random(_global.pyrorandom) + _global.pyrodebut + _global.bonusdegat*_global.pyrocoeff )); if ( random(10000) <= ( _global.critique + _global.critiquepyro ) * 100 ) { degatfinal = degatnormal * 1.5; } else { degatfinal = degatnormal; } } _global.mclevel++; switch (_global.mclevel) { case 1: _global.mcdegat1ref = _root.attachMovie("degataffichagedyn", "degataffichagedyn1", 1); setProperty (_global.mcdegat1ref, _x, 90); setProperty (_global.mcdegat1ref, _y, 100); setProperty (_global.mcdegat1ref, _alpha, 100); setProperty (_global.mcdegat1ref, _xscale, 100); setProperty (_global.mcdegat1ref, _yscale, 66); _global.mcdegat1ref.dmg.embedFonts = true; _global.mcdegat1ref.degat = degatfinal; _global.mcdegat1 = true; break; case 2: _global.mcdegat2ref = _root.attachMovie("degataffichagedyn", "degataffichagedyn2", 2); setProperty (_global.mcdegat2ref, _x, 90); setProperty (_global.mcdegat2ref, _y, 100); setProperty (_global.mcdegat2ref, _alpha, 100); setProperty (_global.mcdegat2ref, _xscale, 100); setProperty (_global.mcdegat2ref, _yscale, 66); _global.mcdegat2ref.dmg.embedFonts = true; _global.mcdegat2ref.degat = degatfinal; _global.mcdegat2 = true; break; case 3: _global.mcdegat3ref = _root.attachMovie("degataffichagedyn", "degataffichagedyn3", 3); setProperty (_global.mcdegat3ref, _x, 90); setProperty (_global.mcdegat3ref, _y, 100); setProperty (_global.mcdegat3ref, _alpha, 100); setProperty (_global.mcdegat3ref, _xscale, 100); setProperty (_global.mcdegat3ref, _yscale, 66); _global.mcdegat3ref.dmg.embedFonts = true; _global.mcdegat3ref.degat = degatfinal; _global.mcdegat3 = true; break; case 4: _global.mcdegat4ref = _root.attachMovie("degataffichagedyn", "degataffichagedyn4", 4); setProperty (_global.mcdegat4ref, _x, 90); setProperty (_global.mcdegat4ref, _y, 100); setProperty (_global.mcdegat4ref, _alpha, 100); setProperty (_global.mcdegat4ref, _xscale, 100); setProperty (_global.mcdegat4ref, _yscale, 66); _global.mcdegat4ref.dmg.embedFonts = true; _global.mcdegat4ref.degat = degatfinal; _global.mcdegat4 = true; break; } tranche(sort); }
pour ce qui est de l'animation du texte d'affichage des dégâts :
Et pour finir ma fonction dépiler qui me permet de faire une sorte de FIFO ( First In First Out ) pour l'affichage des dégâts des sorts étant donner qu'il est possible que plusieurs sorts arrivent avec un temps d'intervalle très court!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 _root.onEnterFrame = function() { if ( _global.mcdegat1 == true ) { _global.mcdegat1ref._y--; _global.mcdegat1ref._alpha -= 1; //trace(_global.mcdegat1ref._alpha + " 1"); if ( _global.mcdegat1ref._alpha <= 0 ) { depiler(); } } if ( _global.mcdegat2 == true ) { _global.mcdegat2ref._y--; _global.mcdegat2ref._alpha -= 1; //trace(_global.mcdegat2ref._alpha + " 2"); } if ( _global.mcdegat3 == true ) { _global.mcdegat3ref._y--; _global.mcdegat3ref._alpha -= 1; //trace(_global.mcdegat3ref._alpha + " 3"); } if ( _global.mcdegat4 == true ) { _global.mcdegat4ref._y--; _global.mcdegat4ref._alpha -= 1; //trace(_global.mcdegat4ref._alpha + " 4"); } }
J'espère avoir bien expliqué la situation!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 function depiler() { _global.mclevel--; removeMovieClip(_global.mcdegat1ref); if ( _global.mcdegat2 == true ) { if ( _global.mcdegat3 == true ) { if ( _global.mcdegat4 == true ) { trace("Terminer - [x][x][x][x]"); _global.mcdegat1ref = null; _global.mcdegat1ref = _global.mcdegat2ref; _global.mcdegat2ref = _global.mcdegat3ref; _global.mcdegat3ref = _global.mcdegat4ref; _global.mcdegat1 = true; _global.mcdegat2 = true; _global.mcdegat3 = true; _global.mcdegat4 = false; _global.mcdegat4ref = null; } else { trace("Terminer - [x][x][x][ ]"); _global.mcdegat1ref = null; _global.mcdegat1ref = _global.mcdegat2ref; _global.mcdegat2ref = _global.mcdegat3ref; _global.mcdegat1 = true; _global.mcdegat2 = true; _global.mcdegat3 = false; _global.mcdegat4 = false; _global.mcdegat3ref = null } } else { trace("Terminer - [x][x][ ][ ]"); _global.mcdegat1ref = null; _global.mcdegat1ref = _global.mcdegat2ref; _global.mcdegat1 = true; _global.mcdegat2 = false; _global.mcdegat3 = false; _global.mcdegat4 = false; _global.mcdegat2ref = null; } } else { trace("Terminer - [x][ ][ ][ ]"); _global.mcdegat1 = false; _global.mcdegat2 = false; _global.mcdegat3 = false; _global.mcdegat4 = false; _global.mcdegat1ref = null; } }
Je profite pour vous mettre un lien de mon programme à l'état que j'écris ce post :
Simulateur Mage
Tester le sort brûlure c'est le plus rapide et c'est celui qui déclenche l'effet de défilement instable...
ps : vous ne pouvez pas lancer plus de 4 sort en simultané ^^ ne spammer pas la touche en vous demandant pourquoi à un moment vous n'avez pas la barre de cast
Maintenant place au problème :
Quand je lance mes sorts, pas de problème, ils se suppriment bien, ils s'estompent avec le temps ( deviennent transparent ) !! Seulement que par moment, le texte d'affichage des dégâts se déplacent vers le haut un peu plus rapidement que les autres!! Sachant que ma seule fonction qui agit sur ce texte ne fait qu'incrémenter de 1 mon texte vers le haut!! Apparemment ce 1 est symbolique en étant dans un enterFrame !!
J'ai aussi remarqué que cet effet survient au moment qu'un sort est lancé juste après qu'un sort soit effacer de la scène!!
Je n'arrête pas les tests et la je ne comprend pas ce qui peut influencer tout d'un coup la vitesse de défilement d'un texte par rapport aux autres!!
Je vous remercie d'avance et en espérant avoir été assez clair sur mes explications
ps : des avis sur optimisations ou des critiques sur le code sont les bienvenues, j'avoue que je n'ai pas vraiment structuré, j'ai fais à la méthode brutal sans pseudo-code ultérieur et autre!!
HelziX
Partager