d´ailleurs, je vais en profiter pour mettre au point un truc qui pourrat etre utile dans ce topic : Je ne suis pas un codeur, je ne l´ai jamais ete, et ne le serai jamais
Parfois, au boulot, ou dans mes projets, je code pour depanner, mes collegues ou moi meme, mais je ne suis pas tres efficace a ca : ce n´est pas mon "metier"
L´idee de ce topic est de prodiguer une aide de base pour ceux qui souhaitent debuter en ActionScript. mais, LP, toi-meme, Fil en savez aussi long que moi sur L´AS, si ce n´est plus.
Bien sur, je pourrais essayer de repondre a des questions plus complexes, mais n´etant pas codeur "confirme", cela veut dire que cela me prendra beaucoup plus de temps que normal : aller dans l´aide de Flash, sur google pour trouver des explications, faire des essais de codes, etc ... Bref, lorsqu´un "vrai" codeur prendrait 5 minutes pour vous donner une reponse, moi, il me faudrait quelque chose comme 5 heures ![]()
Quand je ne bosse pas au bureau, je bosse sur mon jeu, ou me detend : venir sur ces forums fais partie des moments "detente" - de meme que repondre a des questions simples sur l´AS, dans la mesure ou je connais deja la reponse ... par contre, je ne m´alloue pas de temps pour les "devinettes-code" : je prefere utiliser ce temps a travailler sur mon jeu
J´espere que tu n´es pas vexe par mon message : j´essaye juste d´expliquer pourquoi je ne veux pas "m´amuser" a retrouver une erreur que tu as deja trouve ![]()
Hihi, moi j´ai trouvé ^^
C´est parce que tu créé un nouvel objet à chaque fois que tu passe sur l´image 1, sans supprimer l´ancien, donc ils incrémentent tous la variable nbclics ![]()
Pour remédier à ce problème, c´est tout simple.
Déjà on a pas besoin de créer un objet juste pour ça.
Le code suivant marche parfaitement :
stop();
nbclics = 0;
this.onMouseDown = function() {
nbclics++;
champClic.text = nbclics;
if (nbclics>9) {
play();
this.onMouseDown = function() {
};
// Ca c´est pour virer le onMouseDown (ça surrpime l´ancien)
}
};
(à placer sur la 1e image, à la place de l´autre)
Je crois que son idee, c´etait de jouer avec les objets et les ecouteurs ...
l´ideal, c´est de se garder une frame (ou une fonction) "init" ou toutes les declarations d´objets, de variables etc ne sont declares qu´une seule fois, et qui n´est jamais rappelee lors de l´execution du code, a l´exception d´un reset
Moi en général pour faire ça je met sur la première image :
function Reset(){reset}
if(!$Load){
Reset();
$Load = true
}
Comme ça il n´exécute reset qu´une seule fois, même si on repasse sur l´image.
oui, c´est l´esprit
( par contre, ton $ devant Load ...booooo !
on est pas dans PHP
)
J´avoue ^^
En fait c´est une vieille habitude, je cherchais un signe spécial pour faire partie du nom de la variable histoire que je ne réutilise pas ce nom dans une autre variable, par inadvertance.
Mais j´utilise aussi ce signe pour différencier le nom des fonctions de mon moteur physique.
Par exemple $Gravite(pt)
je plaisantais
.. on a tous nos petites methodes : moi, mes noms de fonction ont toujours 2 syllabes ou plus ( ex : myFonction() ou bien commenceMonJeu() ...) chaque syllabe commencant par une majuscule, excepte la premiere.
Par contre, j´essaye que les variables restent monosyllabiques ( toto ) et si elles on deux ou plus, j´utilse _ pour differencier les syllabes (ma_variable)
luxregina--> me detend : venir sur ces forums fais partie des moments "detente" - de meme que repondre a des questions simples sur l´AS,
c´est tout a fait mon cas
, sauf que moi j´ai mes études ( plein d´études )
luxregina-->J´espere que tu n´es pas vexe par mon message : j´essaye juste d´expliquer pourquoi je ne veux pas "m´amuser" a retrouver une erreur que tu as deja trouve
bien sur que je comprend ton point de vue , c´est la meme cause pour moi vue que j´ai plein de boulot , j´arrive a pène de trouver un peu de temps pour flash
Hihi, moi j´ai trouvé ^^
LPTheKiller_2-->C´est parce que tu créé un nouvel objet à chaque fois que tu passe sur l´image 1, sans supprimer l´ancien, donc ils incrémentent tous la variable nbclics
, c´est ca oui a chaque retour au premier image il fait un Mouse.addListener(monObjet)de plus (donc il ajoute un ecouteur de plus
)
a part votre méthode LPTheKiller_2 y´a une autre sans changer l´ancien AS
faudrait juste ajouter un Mouse.removeListener(monObjet) au début pour enlever l´ancien écouteur
,
stop();
Mouse.removeListener(monObjet)//enlève l´ancien ecouteur //
nbclics = 0;
monObjet = new Object();
monObjet.onMouseDown = function(){
augmente de 1
nbclics = nbclics + 1;
trace(nbclics);
champClic.text = nbclics;
if(nbclics >= 10){
gotoAndStop(2);
}
}
Mouse.addListener(monObjet);
enfin moi ca m´a fallu du temps pour la trouver
LPTheKiller_2-->
function Reset(){reset}
if(!$Load){
Reset();
$Load = true
}
bonne idéé je l´a connais pas ,
en faite LPTheKiller_2 ton moteur que je trouve vachemnt réussi -bravo
- tu l´a fait avec des classe ou avec l´AS 1et2
Je l´ai pas fait avec des classes car à l´époque où je l´ai commencé (y´a déjà plus d´un an il me semble), je ne connaissais pas les classes ^^
C´est que à partir de movieClips, d´objets et de fonctions.
Voici par exemple la fonction $Gravite, que j´ai évoqué plus haut, c´est une des fonctions les plus simples :
// Gravite
function $Gravite(pt) {
if (!$Detecte(pt) && grav) {
if (pt._type == 1) {
pt.vitesse_y += _gravite/10;
}
}
}
_gravite c´est une constante : la constante de gravitation universelle appellée en physique "g".
$Detecte(pt) est une fonction qui renvoie true si le point est dans le sol, false s´il ne l´est pas.
(après s´il est dans le sol, il ne suffit pas de ne plus lui appliquer la gravité, il faut aussi le ressortir du sol, ce qui n´est pas une mince affaire).
grav : la variable qui indique si la gravité est active ou pas.
oui je comprend bien ton fonction LPTheKiller_2
et aussi "g" en physique
LPTheKiller_2-->l´ai commencé (y´a déjà plus d´un an il me semble), je ne connaissais pas les classes ^^
ben croie le ou pas ,moi j´ai commencé a ton age (16 ans ) et c´est toujours pour le fun , j´essaye toujours d´étre a jour
.
je pari que t´a des problème au niveau du hitest parceque le hittest ne detecte que le carreau (bleu ) seulement mais pas votre mc , j´ai fait un petit moteur de collision rapidos , qui regle ce problème mais malheureusement c´est une classe pas en AS :
class hir3 {
public var z:MovieClip;
public var k:Number;
public var a:MovieClip;
public function boug(i:Number,perso:MovieClip ,circuit:MovieClip ){
z=perso.duplicateMovieClip("a0",0)
z._visible=false;
if (Key.isDown(Key.RIGHT)) {
z._x+=1;
}
if (Key.isDown(Key.LEFT)) {
z._x-=1;
}
if (Key.isDown(Key.UP)) {
z._y-=1
k=1}
if
((circuit.hitTest(z._x,z._y,true)==false)&&(circui
t.hitTest(z._x+z._width,z._y,true)==false)&&(circu
it.hitTest(z._x,z._y+z._height,true)==false)&&(cir
cuit.hitTest(z._x+z._width,z._y+z._height,true)==f
alse)){
perso._x=z._x
z._y+=1
perso._y=z._y
}
else {z._y+=0
z._x=perso._x;
z._y=perso._y;
}
}
}
puis dans le flash principale :
s._visible=false
var i:Number=0;
import hir2;
var ii1:hir2=new hir2() ;
this.onEnterFrame=function(){
if
(bo.hitTest(perso1)){circuit1.porte._width=0;bo.go
toAndPlay(2)}
else if
(fin.hitTest(perso1)){s._x=100;s._y=100;s._visible
=true}
ii1.boug(i,perso1,circuit1)}
enfin je sais que c´est pas trés claire
bon si cela t´interesse je peut la convertir en AS 1 ou 2
.
et vala un petit jeu juste avec ce moteur ( et qui contient la 2ème partie de As que j´ai posté )et qui explique un peu le truc ^^
http://img442.imageshack.us/my.php?image=hittestew1.swf
PS : essaye de terminer le jeu (faire sortir le le super heros ) ca demande boucoups de reflection ![]()
Je crois que tu t´es beaucoup compliqué la vie, tout ça juste pour la collision d´un rectangle Oo
Sinon pour les hitTest de mes points, ils sont on ne peut plus simples car mes points, comme leur nom l´indique, sont ponctuels, je teste juste la collision en leur position X et Y.
Après j´attache un rond rouge au point pour qu´on puisse le visualiser et le déplacer, mais ce n´est pas le point en lui-même.
Sinon dans le genre trucs inutils pour se compliquer la vie, j´avais fait un moteur de recherche pour un logiciel que je dévelloppais pour un ami. Il recherche dans une liste de strings le mot qu´on a entré.
Mais je ne connaissais aucune fonction qui permet d´intéragir sur les chaînes, donc voilà ce que ça donnait :
stop();
for (i=1; i<21; i++) {
for (j=1; j<8; j++) {
temp = index.data["DVD"+i+"film"+j];
this[index.data["DVD"+i+"film"+j]] = undefined;
}
}
liste = "";
liste += "Résultats trouvés :<br>";
for (i=1; i<21; i++) {
for (j=1; j<8; j++) {
for (k=0; k<index.data["DVD"+i+"film"+j].length; k++) {
temp = index.data["DVD"+i+"film"+j];
if (index.data["DVD"+i+"film"+j].charAt(k) == recherche.charAt(0)) {
/**/
for (l=0, kp=k; l<recherche.length || kp<index.data["DVD"+i+"film"+j].length; l++, kp++) {
//trace(kp+"->"+index.data["DVD"+i+"film"+j].
charAt(kp)+" "+recherche.charAt(l)+"<-"+l);
if (index.data["DVD"+i+"film"+j].charAt(kp) == recherche.charAt(l)) {
if (l == recherche.length-1 && this[temp] == undefined) {
liste += "Dans le DVD"+i+" :<br>";
liste += "film "+j+" : \t"+index.data["DVD"+i+"film"+j]+"<br>";
this[temp] = "disable";
}
} else {
break;
}
}
}
}
}
}
(ah ah j´ose pas imaginer ta tête avec tous ces for ^^)
Enfin, aucune fonction à part charAt() et le basique mot clé "add" ou "+"...
lesquale35 >>
.... et "gongratulation " pas "gongadulation"
LPTheKiller_2>> Et oui
c’est la première fois que je vois un AS avec 3 for concécutif
y´a des trucs pas claire , mais bon , généralement je comprend ton AS .
pour éviter ces for et rendre ton AS plus cool t´airai pu faire :
for (i=1; i<168; i++) {
j=Math.ceil((i-1)/8)
temp = index.data["DVD"+i-j*8+"film"+j+1];
![]()
Oui j´aurais pu mais je trouve ça plus clair comme c´est fait.
Et puis d´après les tests que je viens de réaliser, ton truc pour mettre un seul for prend environs 1.57 fois plus de temps au processeur pour être exécuté
Car j´ai fait un petit programme qui test le temps de calcul de deux fonctions et trace celui-ci.
Pour le télécharger :
http://pierre.parreaux.free.fr/Autres/OptizonsDansLaJoie.fla
J´ai fait plusieurs tests et remarqué certaines choses assez intéressantes (voir les commentaires).
Il faut écrire sa fonction dans le calque prévu pour, et pour que le prog la test il faut la mettre dans un des paramètres de "Execute", enfin vous comprendrez ^^
Bon les résultat sont assez variable.
Il vaut mieux fermer tous les logiciels qui tournent en même temps sur le PC pour faire les tests.
Ben vouzetes plus là ?
chui toujours là , je teste ca et je te repond
T´es mort ?
Lol.
Mais si t´as la flemme de mater ou de répondre, ou si tu veux pas pour une toute autre raison, je comprendrais hein...
Ou alors peut-être que mon bench a généré un bug dans ton ordinateur, et que celui-ci a explosé, générant une véritable explosion nucléaire et que tu es dans l´impossibilité en ce moment de faire usage de tes doigts pour taper au clavier ^^ (qui sait?)
si nucleaire elle est, l´explosion, je doute que seuls ses doigts soient handicapes ![]()