Comment empecher la modification de variables ?

Thylo Messages postés 2 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 14 avril 2006 - 13 avril 2006 à 12:40
Thylo Messages postés 2 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 14 avril 2006 - 14 avril 2006 à 11:00
Bonjour, je vient de réaliser un code pour generer aléatoirement le sol de mon jeu (un genre de Worms), mais horreur en mettant un _root.sol._x ++ sur la frame suivante pour pouvoir "scroller" mon décor, mon décor se réinitialisais a chaque passage sur la frame 1. Ce qui est normal en soit mais tres dérangeant quand on ne veut po avoir un décor qui se réinitalise aléatoirement tt les 1/12 de seconde. Sourtout que je ne peut pas mettre de stop() sur ma timeline sinon tt la programation existante de mon jeu tombe a l'eau...

Mon code pour le sol est :

_root.createEmptyMovieClip("sol", 1);
//Valeurs aléatoire des x et y pour la carte
A = 0;
AY = Math.round(Math.random()*(400-0))+50;
AB = Math.round(Math.random()*(100-0))+0;
ABY = Math.round(Math.random()*(400-0))+50;
B = 100;
BY = Math.round(Math.random()*(400-0))+50;
BC = Math.round(Math.random()*(100-0))+0;
BCY = Math.round(Math.random()*(400-0))+50;
trace(BC);
//
...ainsi de suite
//
K = 1000;
KY = Math.round(Math.random()*(400-0))+50;
KL = BC=Math.round(Math.random()*(100-0))+0;
KLY = Math.round(Math.random()*(400-0))+50;
L = 1100;
LY = Math.round(Math.random()*(400-0))+50;
with (_root.sol) {
lineStyle(0, 0x0000FF, 100);
beginFill(0xFF0000);
moveTo(A, AY);
curveTo(AB, ABY, B, BY);
//
...ainsi de suite
//
curveTo(J+JK, JKY, K, KY);
curveTo(K+KL, KLY, L, LY);
lineTo(L, 0);
lineTo(L, 400);
lineTo(0, 400);
lineTo(0, AY);
endFill();
}

La question qui me trotte donc est comment empecher l'enterframe sur des variables ? Ne serais ce pas une histoire de onLoad quelque chose ?

Autre bete question tant que j'y suis, j'arrive a définir une fonction dans une "frame action" mais po dans un "movieclip action" est ce normal ?
test=function() {
}
??

2 réponses

cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 1
14 avril 2006 à 09:27
Bonjour,

J'ai quelques idees pour ton probleme (mais je ne comprend pas pourquoi tu ne peux pas mettre de stop, une fois que ton sol est créé, il est créé) :

Ton premier probleme :

Si tu as besoin de boucler : met tes variables aleatoires dans la frame 1, et dans la frame 2 ton code qui doit etre executer a chaque fois. Au lieu de faire une boucle qui revient a la frame 1, elle revient a la frame 2, "gotoAndPlay(2)". Comme ca, tes variables auront une valeur aletoire uniquement lors du lancement de l'animation.

Enfin, ton code, j'ai l'impression, creer les lignes, sols..... dans l'animation pur (non ?), Utilise plutot un Clip (vide au depart) pour creer ton sol, ex :

Au lieu de faire curveTo(J+JK, JKY, K, KY); fais clip.curveTo(J+JK, JKY, K, KY); .

Comme ca pour le scroller, le bouger.....tu as juste a manipuler le clip, du type : clip._x += 5 ...... (et place ton clip dans un masque peut-etre pour qu'il ne depasse pas visiblement la taille de l'anim).

Ce ne sont que des idees parce que j'ai pas tres bien saisie ton probleme....

Pour ton second probleme :
(test =function() {})

Les fonctions créées-les tous dans la premiere frame (dans un calque "fonctions" par ex). Ensuite tu peux les appeler un par un n'importe ou en faisant : _root.nomDeLaFonction(); , Meme dans un movieClip.

A+
Et bonne chance !
Cbil
0
Thylo Messages postés 2 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 14 avril 2006
14 avril 2006 à 11:00
En fait,pour etre plus clair, j'ai déja réalisé la majeure partie de mon jeu, ce qui est a dire : un perso animé ne se déplaçant pas reellement mais faisant défiler l'axe des x du décor sous lui, un ennemi doté d'une "IA" lui permettant de faire des rondes de garde et de detecter/suivre mon Perso selon un cone de vue Vert/Rouge, de ne pas detecter mon perso lorsqu'il est planqué derriere une caisse, de tirer une fois a portée de tir... Bref ça c pour le jeu en lui meme, mais fénéant comme je suis, je n'ai po envie de creer une campagne complete, donc generateur de maps, et plaçage aléatoire des ennemis et des caisses.

Mon probleme était donc de pouvoir creer ma map au chargement du jeu et de l'empecher de changer jusqu'a la prochaine fois. Mais ton idée de mettre mon code sur la frame un est po bete du tt. en plus cela me permetrait d'utiliser cette frame pour définir mes variables de chargement.

Je suis aussi a la recherche d'un tuto, lien,etc sur comment faire une gestion correcte d'un tir (la balle sort du canon de l'arme, canon attaché au MC bras dans le MC Perso, le bras faisant une rotation selon la souris)

Voila le code que j'avais trouvé.contenu dans le MC perso dans un enterframe mais je ne sais po pour quel obscur raison, les balles partent du milieu de l'écran quand je lui dit de prendre le _x du canon

if (openfire == 1) {
this.Bras.Rocket._alpha = 0;
this._parent.RocketRoot.duplicateMovieClip("Rocket"+k, k);
//--------Pas moyen de faire partir les balles du canon lui meme
this._parent["Rocket"+k]._alpha = 100;
this._parent["Rocket"+k]._x = this._x-15;
this._parent["Rocket"+k]._y = this._y-15;
this._parent["Rocket"+k]._rotation = this.Bras._rotation;
this._parent["Rocket"+k].progressx = 20*Math.cos(Math.PI/180*(this.Bras._rotation));
this._parent["Rocket"+k].progressy = 20*Math.sin(Math.PI/180*(this.Bras._rotation));
k++;
}

//la suite du code est contenue dans le mc Rocket

onClipEvent(enterFrame){
this._x += progressx
this._y += progressy


if (this._x<=15) {
removeMovieClip(this);
}
if (this._x>=370) {
removeMovieClip(this);
}
if (this._y<=30) {
removeMovieClip(this);
}
if (this._y>=370) {
removeMovieClip(this);
}
}
0
Rejoignez-nous