Oui, c'est du java ![]()
Je suis pas sûr de bien comprendre mais ce que j'ai compris du static, c'est qu'il permet de conserver en mémoire une information d'une fonction qui s'exécute.
Enfin je sais pas si je suis clair mais sur le net j'ai vu cet exemple:
class UneClasse {
public static int counter = 0;
}
class Main {
public static void main (String []args) {
UneClasse un = new UneClasse (), deu = new UneClasse ();
un.counter++;
println (UneClasse.counter); // affiche 1
deu.counter++ ;
println (un.counter); // affiche 2
}
}
En gros a chaque appelle de counter, l'ordi est censé oublié le résultat, mais avec le static, il le conserve et permet de le réutiliser.
C'est à peu près ça?
Main: http://pastebin.com/XUVnrNws
Prepare: http://pastebin.com/5vZpmxkH
Equipment: http://pastebin.com/fvGDVQ1w
Characters: http://pastebin.com/CemPmrW8
Arena: http://pastebin.com/Ns3XFbGY
Au passage, voici mon code retouché pour essayer d'organiser un peu mieux.
Je l'avais montré à un autre membre en MP qui m'a dit que j'utilisais beaucoup de static. J'ai un peu avancé en POO justement, et je me demande quel est l'intérêt de refaire le code pour me passer des static (car j'ai vu que je pouvais le faire) ?
Merci ![]()
" mais ce que j'ai compris du static, c'est qu'il permet de conserver en mémoire une information d'une fonction qui s'exécute. "
En fait static à plusieurs usages selon les situtations, l'exemple que tu as donné ne correspond pas à ce que tu viens de dire.
Ce que tu as dit est correct dans le cas où on utilise static avec une variable dite "automatique", en gros une variable que tu instancies à l'intérieur d'une fonction (or dans ton exemple ta variable appartient à une classe, c'est différent), ce genre de variable existe seulement dans le "bloc" de la fonction en question, une fois qu'on est sorti de la fonction, cette variable n'existe plus en mémoire.
En utilisant le mot-clé statique on peut justement faire en sorte que, comme tu l'as dit toi même, la variable reste en mémoire même lorsque l'on sort du bloc de la fonction en question et on garde ainsi la valeur pour de futurs appels à cette fonction.
Maintenant pour les classes, disons que quand tu écris un truc comme :
public class machin
{
int n;
char c;
}
Tu écris ce que l'on définit comme le prototype de la classe Bidule, mais après il faut que tu instancie des machins en mémoire si tu veux les manipuler, tu pourrais par exemple instancier 5 machins et chacun aurait un entier n et un caractère c distinct de ceux des autres machins, tu pourrais ajouter 5 à l'entier n de l'un de tes machins et seule la valeur de celui-ci changerait, le n des autres garderait la même valeur.
En revanche si on avait ajouté le mot-clé "static" devant "int n;", l'entier n existerait en mémoire dès l’exécution du programme (sans même allouer un seul machin en mémoire) car celui-ci est stocké dans la mémoire dite statique (et non pas dynamique). Puis si tu instancies des machins en mémoires ils auront une fois de plus chacun leur caractère c mais ils partageront tous le même entier n car il en existe qu'une seule copie (présente dès le début du programme comme dit plus haut).
Pour te donner un exemple un peu plus concret, je pourrais écrire une classe soldat ainsi :
class Soldat
{
static final int vie_max;
int vie;
}
Si je décide que dans mon jeu tous les soldats ont le même nombre de points de vie max, je peux utiliser static car il suffit d'avoir cette valeur à un seul endroit en mémoire pour s'y référer par la suite, si j'ai 50 soldats cela ne me servirait à rien d'avoir 50 fois la valeur vie_max en mémoire, ça serait juste du gaspillage.
En revanche il faut que chaque soldat ait sa propre variable "vie" (qui représenterait ici le nombre de hp actuel d'un soldat) car si un soldat se prends une balle et perds de la vie, je voudrais soustraire de la vie seulement à un seul soldat et pas à tous.
Donc en gros la variable vie_max appartient bien à la classe Soldat mais elle n'est pas propre à chaque instance de cette classe.
" le prototype de la classe Bidule "
La classe "machin", ce lapsus. ![]()
Ton exemple me parle bien ouais
Je vais rebûcher un peu et essayer de mettre au clair tout ça, mais j'y vois plus clair.
Merci ![]()
Salut tout le monde !
J'étais en train de jouer à Doodle Jump pour les connaisseurs et je me demandais comment étaient gérés les sauts et je me demandais si c'était possible en utilisant les formules de physiques "Chute verticale" avec
1) Y = 1/2g*t*t + Vo*t + yo
2) Vf = g*t + Vo
Et je me disais que sur chaque plateforme on définit un Vo (si c'est un ressort on donnera une plus grande valeur que si c'est un bloc simple) puis ensuite on déplace le personnage toute les x secondes (x = temps pour que ça soit fluide,sûrement en ms) et au moment où il retombe (à partir de Vf = 0) on cherche si il y a une collision avec le bloc et on mets à jour Yo.
Est-ce possible d'effectuer ceci comme je pense ?
C'est certainement comme cela que c'est fait.
Ok, merci, pour une fois que je vois une application de ce que j'ai appris en physique
Petite question bête en C++,
Pas plus tard qu'aujourd'hui,j'ai vu qqun initialisé ses variables comme :
int foo(0);
Quelle est la réelle différence entre ça et
int foo = 0; ?
Y-a-t-il un avantage ? foo(0) devrait être utiliser seulement pour les listes d'initialisations ?
Merci !
vive_cod, il n'y a aucune difference les deux notations sont equivalentes.
La notation parenthese est necaissaire pour les objets qui ont plus d'un parametre dans le constructeur
foo bar (0,1,2);
Par extension ca marche aussi pour un seul parametre
foo bar (0);
Pour pouvoir remplacer de facon transparente foo par un type primitif, C++ defini
foo bar = 0;
et
foo bar(0);
de la meme facon
Ok,merci c'est bien ce que je pensais (utiliser () pour les constructeurs et les listes d'initialisations)
quelqu'un d'autre a essayé la nouvelle version stable de gimp, 2.8.0?
il n'y a que chez moi qu'elle rame horriblement (sous windows xp, et genre quand on utilise l'outil de déformation en cage)? j'ai même un PNG tout bête sous la main, 1920x1080 rempli de brun qu'il suffit d'afficher pour faire chuter le framerate à moins de 1, okay quoi. ![]()
Je n'essaye pas Gimp, ça fait longtemps que j'ai décidé de ne plus l'utiliser ![]()
gagne du temps et explique la nature de tes griefs contre ce logiciel, je sais que t'en meurs d'envie. ![]()
Bon déjà je n'utilise que 1% des fonctionnalités, donc j'ai juste besoin de Paint.net.
Ensuite je trouve l'interface contre productive, j'arrive pas à m'y faire.
Enfin, j'ai toujours eu pas mal de problème de stabilité ou de lenteur avec donc je suis très bien avec mon Paint.net.
"Ensuite je trouve l'interface contre productive, j'arrive pas à m'y faire. "
même avec le mode simple-fenêtre qui représente une partie de l'intérêt de 2.8?
moi c'est le contraire, j'évite soigneusement paint.net. il représente probablement le juste milieu entre gimp et MSPaint, mais je préfère les extrêmes. ![]()
Ben je sais pas, je jetterai un coup d’œil pour voir les nouveautés de la 2.8.
Dans le même ordre d'idée, j'aime pas Blender non plus ^^
Wow ils ont enfin arrêté avec cette grosse merde de fenêtres flottantes!!!
Ca leur a pris 10 ans mais ils l'ont fait! Quel grand pas! Je vais enfin pouvoir m'y remettre.
j'ai trouvé un cheat pour utiliser le cage deformation tool dans les grosses images, il suffit d'entourer la section qu'on veut déformer d'un rectangle de sélection et d'utiliser l'outil de déformation à l'intérieur de cette sélection, mais ça reste du bricolage... à l'occasion, j'essayerai de le compiler, avec toutes les options pour qu'il soit optimisé uniquement pour MON processeur. ![]()