loicseg
Messages postés168Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention30 septembre 2011
-
22 déc. 2010 à 19:56
Berkmann18 -
30 avril 2012 à 16:11
Bonjour à tous,
voilà j'ai créé un code de "vie" qui réduit la vie lors d'un combat dans un mini rpg que je programme en javascript/html... sauf que le code est assez long et j'aimerais trouver un moyen de le raccourcir, je pense qu'il y a un moyen mais je ne me rappelle plus de la structure :
voici mes fonctions javascript :
if (document.getElementById)
{
if(navigator.appName.substring(0,3) == "Net")
document.captureEvents(Event.MOUSEMOVE);
window.onload = viepleine;
}
function viepleine(){
if (document.getElementById)
{
document.vie.src='img/100.bmp';
}
tempo = setTimeout("viepleine()", 1000);
}
function vie100(){
if (document.getElementById)
{
document.vie.src='img/100.bmp';
}
tempo = setTimeout("vie98()", 1000);
}
function vie98(){
if (document.getElementById)
{
document.vie.src='img/98.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie96()", 1000);
}
function vie96(){
if (document.getElementById)
{
document.vie.src='img/96.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie94()", 1000);
}
function vie94(){
if (document.getElementById)
{
document.vie.src='img/94.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie92()", 1000);
}
function vie92(){
if (document.getElementById)
{
document.vie.src='img/92.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie90()", 1000);
}
function vie90(){
if (document.getElementById)
{
document.vie.src='img/90.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie88()", 1000);
}
function vie88(){
if (document.getElementById)
{
document.vie.src='img/88.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie86()", 1000);
}
function vie86(){
if (document.getElementById)
{
document.vie.src='img/86.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie84()", 1000);
}
function vie84(){
if (document.getElementById)
{
document.vie.src='img/84.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie82()", 1000);
}
function vie82(){
if (document.getElementById)
{
document.vie.src='img/82.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie80()", 1000);
}
function vie80(){
if (document.getElementById)
{
document.vie.src='img/80.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie78()", 1000);
}
function vie78(){
if (document.getElementById)
{
document.vie.src='img/78.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie76()", 1000);
}
function vie76(){
if (document.getElementById)
{
document.vie.src='img/76.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie74()", 1000);
}
function vie74(){
if (document.getElementById)
{
document.vie.src='img/74.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie72()", 1000);
}
function vie72(){
if (document.getElementById)
{
document.vie.src='img/72.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie70()", 1000);
}
function vie70(){
if (document.getElementById)
{
document.vie.src='img/70.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie68()", 1000);
}
function vie68(){
if (document.getElementById)
{
document.vie.src='img/68.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie66()", 1000);
}
function vie66(){
if (document.getElementById)
{
document.vie.src='img/66.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie64()", 1000);
}
function vie64(){
if (document.getElementById)
{
document.vie.src='img/64.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie62()", 1000);
}
function vie62(){
if (document.getElementById)
{
document.vie.src='img/62.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie60()", 1000);
}
function vie60(){
if (document.getElementById)
{
document.vie.src='img/60.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie58()", 1000);
}
function vie58(){
if (document.getElementById)
{
document.vie.src='img/58.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie56()", 1000);
}
function vie56(){
if (document.getElementById)
{
document.vie.src='img/56.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie54()", 1000);
}
function vie54(){
if (document.getElementById)
{
document.vie.src='img/54.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie52()", 1000);
}
function vie52(){
if (document.getElementById)
{
document.vie.src='img/52.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie50()", 1000);
}
function vie50(){
if (document.getElementById)
{
document.vie.src='img/50.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie48()", 1000);
}
function vie48(){
if (document.getElementById)
{
document.vie.src='img/48.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie46()", 1000);
}
function vie46(){
if (document.getElementById)
{
document.vie.src='img/46.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie44()", 1000);
}
function vie44(){
if (document.getElementById)
{
document.vie.src='img/44.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie42()", 1000);
}
function vie42(){
if (document.getElementById)
{
document.vie.src='img/42.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie40()", 1000);
}
function vie40(){
if (document.getElementById)
{
document.vie.src='img/40.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie38()", 1000);
}
function vie38(){
if (document.getElementById)
{
document.vie.src='img/38.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie36()", 1000);
}
function vie36(){
if (document.getElementById)
{
document.vie.src='img/36.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie34()", 1000);
}
function vie34(){
if (document.getElementById)
{
document.vie.src='img/34.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie32()", 1000);
}
function vie32(){
if (document.getElementById)
{
document.vie.src='img/32.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie30()", 1000);
}
function vie30(){
if (document.getElementById)
{
document.vie.src='img/30.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie28()", 1000);
}
function vie28(){
if (document.getElementById)
{
document.vie.src='img/28.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie26()", 1000);
}
function vie26(){
if (document.getElementById)
{
document.vie.src='img/26.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie24()", 1000);
}
function vie24(){
if (document.getElementById)
{
document.vie.src='img/24.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie22()", 1000);
}
function vie22(){
if (document.getElementById)
{
document.vie.src='img/22.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie20()", 1000);
}
function vie20(){
if (document.getElementById)
{
document.vie.src='img/20.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie18()", 1000);
}
function vie18(){
if (document.getElementById)
{
document.vie.src='img/18.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie16()", 1000);
}
function vie16(){
if (document.getElementById)
{
document.vie.src='img/16.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie14()", 1000);
}
function vie14(){
if (document.getElementById)
{
document.vie.src='img/14.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie12()", 1000);
}
function vie12(){
if (document.getElementById)
{
document.vie.src='img/12.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie10()", 1000);
}
function vie10(){
if (document.getElementById)
{
document.vie.src='img/10.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie8()", 1000);
}
function vie8(){
if (document.getElementById)
{
document.vie.src='img/8.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie6()", 1000);
}
function vie6(){
if (document.getElementById)
{
document.vie.src='img/6.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie4()", 1000);
}
function vie4(){
if (document.getElementById)
{
document.vie.src='img/4.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie2()", 1000);
}
function vie2(){
if (document.getElementById)
{
document.vie.src='img/2.bmp';
}
window.clearTimeout(tempo);
tempo = setTimeout("vie0()", 1000);
}
function vie0(){
if (document.getElementById)
{
window.clearTimeout(tempo);
document.vie.src='img/0.bmp';
parent.document.getElementById('mort').style.visibility='visible';
parent.map.imgpersomort();
}
}
function blessure(){
tempo = setTimeout("vie100()", 1000);
}
function stop(){
window.clearTimeout(tempo);
}
if(document.getElementById)
{
document.write('');
}
d'après mes souvenirs la structure de la fonction est un truc du genre :
function mafonction()
0<n<100
fichier=img(n).bmp
new src=img(n)-2k
document.img.src='img(n)'
je ne me rappelle pas mais je pense que ce "code" est compréhensible pour ce que je veux faire
loicseg
Messages postés168Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention30 septembre 2011 22 déc. 2010 à 20:00
edit :
function mafonction()
0<n<100 ;
fichier=img(n).bmp ;
new src=img(n)-2k ;
document.img.src='img(n)';
temp = setInterval("mafonction()",300);
PS : si des personnes souhaitent se joindre au projet par plaisir elles sont les bienvenues (attention pas de rémunération : jeu libre et gratuit opensource)
pour continuer,
mais je ne me rappelle plus de la structure
il ne s'agit pas de structure mais de bon sens sur ce coup.
Quand on écrit plusieurs fois la même fonction ou presque on garde la partie commune et on passe ce qui change en paramètre.
Un petit exemple de co
mp
re
ssion
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>[PetoleTeam]Compression de fonction</title>
</head>
<script type ="text/javascript">
//----------------------
function Incremente( param_){
document.getElementById('D_ECRIRE').innerHTML += param_ +' - ';
tempo = setTimeout( function(){ Incremente( param_ +1);}, 1000);
}
//-- lance la fonction
Incremente( 1);
</script>
</html>
enfin le clearTimeout n'est pas nécessaire dans la fonction.
loicseg
Messages postés168Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention30 septembre 2011 23 déc. 2010 à 00:49
<script type="text/javascript">
//----------------------
function combat( vie_){
document.getElementById('life').innerHTML = '';
tempo = setTimeout( function(){ combat( vie_ -2);}, 1000);
}
//-- lance la fonction
combat( 100);
</script>
comprend pas pourquoi ça ne fonctionne pas là
certainement ici que ça coince :
document.getElementById('life').innerHTML = '';
mais je ne connais pas de solution
loicseg
Messages postés168Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention30 septembre 2011 23 déc. 2010 à 11:36
<script type="text/javascript">
function combat( vie_){
document.getElementById("vie").src = 'img/'+ vie_ +'.bmp';
tempo = setTimeout( function(){ combat( vie_ -2);}, 1000);
}
//-- lance la fonction
function cmbt(){
combat( 100);
}
function stop(){
window.clearTimeout(tempo);
}
</script>
maintenant je bloque sur comment relancer le setTimeout mais sans perdre la valeur car voici ce qui se passe en gros :
un clic sur un monstre depuis une frame lance la fonction cmbt() qui lance elle-même la fonction combat. A la fin du "combat" le monstre (image) a disparu et le Timeout s'arrête grâce à la fonction stop()
ondblclick="parent.vie.stop()"
mais voilà lorsque je veux faire un second combat la vie remonte à 100 et ne reprend pas à la valeur atteinte à la fin du combat précédent.
J'espère avoir été assez clair dans l'explication de mon problème et merci encore d'avance pour votre aide.
(par conséquent le même problème se passe avec la jauge d'expérience :
<script type="text/javascript">
function xp( xp_){
document.getElementById("xp").src = 'img/'+ xp_ +'.bmp';
tempo = setTimeout( function(){ xp( xp_ +10);}, 1000);
}
//-- lance la fonction
function gainxp(){
xp( 0);
}
</script>
une fois lancé je ne peux plus l'arrêter et je ne veux pas que l'expérience monte d'un coup comme ça, de plus comment fixer une limite maximum à 100 pour le paramètre xp_ ?
doit générer invalid assignment ou un truc dans ce style because le += dans la ligne
Youpi ! c'est donc super, mais les consoles d'erreurs peuvent rendre de grand service!
...maintenant je bloque sur comment relancer le setTimeout mais sans perdre la valeur...
il te faut la stocker dans une variable.
par conséquent le même problème se passe avec la jauge d'expérience : dans ce cas il est peu être préférable de créer des objets
de plus comment fixer une limite maximum à 100 pour il suffit de tester la valeur.
mais maintenant comment faire pour afficher l'image "personnage mort" lorsque le paramètre vie_ atteint la valeur 0 :
FONCTION ( parametre)
SI parametre SUPERIEUR limite ALORS
DECREMENTE parametre
Rappel FONCTION ( parametre)
SINON
Appel AUTRE_FONCTION
FINSI
FIN FONCTION
et pour finir...
if (vie_ =0){
ne pas confondre affectation et comparaison, donc à lire Les opérateurs
loicseg
Messages postés168Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention30 septembre 2011 24 déc. 2010 à 10:46
Bonjour :
désolé pour la lisibilité du code, c'est vrai que j'y ai pensé pour le premier post mais après j'ai zappé je tacherai de faire attention.
doit générer invalid assignment non je n'ai pas eu d'erreur mais c'est peut être parce que mon "jeu" est dans une fenêtre d'application HTA.
il te faut la stocker dans une variable.
var vie = vie_
??
il est peu être préférable de créer des objets
peux-tu (pouvez-vous) m'éclaircir sur ce point
il suffit de tester la valeur oui mais je n'y arrive pas mais ça vient certainement de la syntaxe de mon code :
j'écris :
if (xp_ =100){
au lieu de :
if (xp_ == 100){
??
par conséquent si j'ai bien compris :
j'écris :
if (vie_ =0){
au lieu de :
if (vie_ == 0)
je vais essayer quelque chose comme ça :
FONCTION ( parametre)
SI parametre SUPERIEUR limite ALORS
DECREMENTE parametre
Rappel FONCTION ( parametre)
SINON
Appel AUTRE_FONCTION
FINSI
FIN FONCTION
j'indiquerai si ça marche... ou pas...
merci encore
loicseg
Messages postés168Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention30 septembre 2011 24 déc. 2010 à 16:16
en fait non c'est bon c'est presque le même code il n'y a que la position du if et sa condition qui change mais sinon il me reste toujours le problème de la "reprise"...
après cela tout sera nickel...
petite info qui pourrait vous aidez à m'aider :
à la fin d'un combat le compteur de décrémentation de la vie s'arrête et il faudrait qu'il puisse reprendre lors d'un nouveau combat (les combats se faisant au clic par clic mais pour lancer une fonction je sais faire donc pas de soucis : onclick="parent.vie.fonction()" : j'utilise parent.vie car la map du jeu se trouve dans un iframe donc voilà pourquoi je rajouter ça si la question venait à être posée...).
voilà je pense que tout est là, merci encore d'avance pour votre aide
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 28 déc. 2010 à 16:10
...comment faire pour attribuer un paramètre à une variable...
ce sont les bases du javascript, comme le signe pour affectation et pour la comparaison, il faut te documenter, on ne peut pas reprendre toutes les bases sur le forum...
je te remets un exemple simple et complet pour que tu regardes comment cela est faisable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>[PetoleTeam]Action Reaction</title>
</head>
Lance
StopRecommence
<script type ="text/javascript">
//-- declaration variable globale
var enCours = 0;
var iTimer = null;
//---------------------
function Affiche( txt_){
//-- recup element pour affichage
var oDiv = document.getElementById('D_ECRIRE');
//-- si texte on ajoute
if( txt_){
oDiv.innerHTML += txt_;
}
//-- sinon on efface
else{
oDiv.innerHTML = '';
}
}
//-------------
function Stop(){
//-- on clear le timer en cours
clearTimeout( iTimer);
}
//-------------
function Start(){
//-- on arrete d'abord l'encours eventuelle
Stop();
//-- relance fonction
Avance( enCours +1);
}
//-------------
function Init(){
//-- efface contenu
Affiche('');
//-- remise a zero compteur
enCours = 0;
//-- relance fonction via la fonction Start
Start();
}
//----------------------
function Avance( param_){
//-- sauvegarde valeur
enCours = param_;
//-- affichage de la valeur
Affiche( param_ +' - ');
//-- ajoute un retour chariot tout les 5
if( param_ % 5 == 0){
Affiche( '
');
}
//-- relance la fonction
iTimer = setTimeout( function(){ Avance( param_ +1);}, 1000);
}
</script>
</html>
Il n'y a rien de bien compliqué, si ce n'est de la méthode et de l'application.
;O)
jdmcreator
Messages postés647Date d'inscriptionsamedi 30 décembre 2000StatutMembreDernière intervention20 juillet 20127 28 déc. 2010 à 19:05
Pourquoi modifies-tu au juste la valeur de vie au lancement d'un combat ? Ce n'est pas nécessaire. Supprime la ligne et dis-moi si ça règle un de tes problèmes.
JDMCreator
--------
Participez au nouveau projet : la wiki sur le javascript !