Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Demystificator

Pages: [1]
1
Général / Re : bad_alloc avec une classe héritant de Drawable
« le: Septembre 16, 2015, 02:24:48 am »
Donc si tu alloues ton tableau dans ton header et que tu définis _nbrTile uniquement dans ton cpp ; qui plus est en dehors du constructeur, j'imagine qu'en fait ton programme alloue un tableau de 0 Tiles et après tu essayes d'y accéder.

Enfin si j'imagine bien ton code.

Je pense que ton new devrait être dans ta méthode load(int) et n'oublie pas de le delete.

2
Général / Re : bad_alloc avec une classe héritant de Drawable
« le: Septembre 12, 2015, 04:13:41 pm »
C'est donc ta map qui a un problème. Bad Alloc signifiant souvent que ton programme n'a pas réussi à allouer la mémoire pour ton tableau, ça peut venir d'un manque de mémoire, fuite mémoire, ou que tu n'as pas de delete dans ton code.

C'est dur à dire après parce qu'on ne sait même pas d'où sort cette variable map.

3
Général / Re : Faire un set de Vector2
« le: Septembre 11, 2015, 05:30:06 pm »
J'ai eu des problèmes avec ce compilateur sur bullet ; une classe ne compilait pas et on m'a dit que ça venait que minGW ou gcc 4.8 avait raté quelque chose.

Voilà donc le topo, j'ai téléchargé MinGW contenant le GCC; j'ai pris mon CodeBlocks sans son compilateur, donc je suis sûr que tout passe par l'installation MinGW.

GNU Make 3.82.90

gcc -v :
Citer
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.8.1/configure --prefix=/mingw --host=mingw32 --build=m
ingw32 --without-pic --enable-shared --enable-static --with-gnu-ld --enable-lto
--enable-libssp --disable-multilib --enable-languages=c,c++,fortran,objc,obj-c++
,ada --disable-sjlj-exceptions --with-dwarf2 --disable-win32-registry --enable-l
ibstdcxx-debug --enable-version-specific-runtime-libs --with-gmp=/usr/src/pkg/gm
p-5.1.2-1-mingw32-src/bld --with-mpc=/usr/src/pkg/mpc-1.0.1-1-mingw32-src/bld --
with-mpfr= --with-system-zlib --with-gnu-as --enable-decimal-float=yes --enable-
libgomp --enable-threads --with-libiconv-prefix=/mingw32 --with-libintl-prefix=/
mingw --disable-bootstrap LDFLAGS=-s CFLAGS=-D_USE_32BIT_TIME_T
Thread model: win32
gcc version 4.8.1 (GCC)

Mon Code::Blocks (je note uniquement ce qui est coché) :
-Wall (active tous les warnings)
-s (Réduit la taille en retirant des symboles de l'exe)
-O2 (optimisation pour gagner du temps)

Pas de define, pas d'autres options de projet.

S'il y a besoin de plus d'infos sur l'installation MinGW ; c'est la dernière version donnée par leur programme MinGW Installation Manager.

Ca viendrait plutôt du MinGW ou du GCC ? Car si je dois changer, autant savoir quoi changer déjà.

4
Général / Re : Faire un set de Vector2
« le: Septembre 11, 2015, 03:26:15 pm »
Oui du coup on se retrouve avec le même prédicat.
Il y a également un warning du compilateur dans Config.hpp est :

Citer
C:\Cpp\SFML\SFML-2.3.1-sources\SFML-2.3.1\include\SFML\Config.hpp|186|warning: ISO C++ 1998 does not support 'long long' [-Wlong-long]|

Donc il semble plutôt bloquer sur la déclaration du type ; que long long ne semble pas être compatible avec les anciens iso.

Mais si c'est une question de quantité de bits j'avoue avoir un peu pris le compilateur sans trop me poser la question et il me semble travailler avec un compilateur 32bits et mon OS est en 64bits. Est ce que cela pourrait expliquer pourquoi il rejette les 64 ?

5
Général / Re : Faire un set de Vector2
« le: Septembre 11, 2015, 02:14:09 pm »
Le doublon peut être créé mais ça ne se voit pas dans ce petit bout de code.

J'essaie de coder un match3 comme Candy Crush, et res devra contenir tous les jetons alignés. Seulement il peut arriver qu'un jeton soit aligné à la fois verticalement et horizontalement et je dois récupérer 5 jetons alignés et non 6 pour pas fausser mes calculs sur le score.

Juste en dessous avec le code, je fais la même chose avec test_horizontal.

Donc, merci pour le prédicat.

Par contre, il me pose d'autres soucis  :

Citer
This file requires compiler and library support for the \
ISO C++ 2011 standard. This support is currently experimental, and must be \
enabled with the -std=c++11 or -std=gnu++11 compiler options.

A cet endroit là dans Config.hpp, ligne 186 :

    #if defined(_MSC_VER)
        typedef signed   __int64 Int64;
        typedef unsigned __int64 Uint64;
    #else
        typedef signed   long long Int64; //ici
        typedef unsigned long long Uint64; //et la
    #endif

Il m'indique aussi que logiquement, le prédicat ne peut ni renvoyer a ou b qui sont des Vector2i, alors que l'opérateur doit renvoyer un booléen. Si je traffique un peu le prédicat pour renvoyer un booléen; il ne me reste plus que le problème de l'iso 2011.

Mais quand j'active -stc=c++11 ; j'ai une erreur dans math.h, ligne 635 carrément :

Citer
c:\mingw\include\math.h|635|error: '_hypot' was not declared in this scope|

/* 7.12.7.3  */
extern double __cdecl hypot (double, double); /* in libmoldname.a */
extern float __cdecl hypotf (float, float);
#ifndef __NO_INLINE__
__CRT_INLINE float __cdecl hypotf (float x, float y)
{ return (float)(_hypot (x, y)); } //ici
#endif
extern long double __cdecl hypotl (long double, long double);

6
Général / Re : Erreur lors d'instalation sur Codeblocks
« le: Septembre 11, 2015, 01:09:09 am »
Le mieux est de compiler toi même. Y a des tutos pour ça.

Sinon faut connaître la version de ton compilateur et chercher sur le site s'il y a une version précompilée qui correspond.

7
Général / Re : Le processeur tourne à fond
« le: Septembre 11, 2015, 12:59:12 am »
Il faudrait des infos supplémentaires sur ce que tu utilises (carte graphique, version SFML, OS) ; pense à mettre les pilotes de la carte graphique à jour.

Aussi, quand tu dis que ce n'est pas fluide, c'est quel genre ? La barre semble se déplacer en retard ? Au ralenti ? Ou elle se "téléporte" ?

Après avoir cherché sur le net, il apparaît que la Vsync de SFML fait parfois des siennes et qu'à priori le must c'est de passer par ta carte graphique directement (note qu'il me semble que le Vsync de Nvidia n'a d'effet que si l'application est en plein écran ; en tout cas quand je m'en suis servi, ça ne prenait effet qu'en plein écran).

Je ne sais pas non plus si ça changerait quoi que ce soit, mais mettre ta Clock dans la boucle de window.isOpen() et restart immédiatement après les évènements et avant d'appeler ta méthode. T'auras plus qu'à passer le Time en argument ; cela te permettra aussi d'avoir le même temps pour tes futures méthodes bougerBalle, tout en évitant de devoir gérer plusieurs variables Time.

Il y aurait aussi peut-être une technique un peu sale qui consisterait à forcer  avec un sleep si ton image est rendue "bien trop vite" sans passer par vsync ou framelimiter.
Ca donnerait un truc du genre :
sf::Time time = clock.restart();
float temps_mort = 0.015 - time; //(1/60 de seconde)
if(temps_mort > 0)
      sf::Sleep(temps_mort);
 
Mais je pense pas que ce soit très propre puisque le Sleep n'est pas une science exacte ; ça va dépendre du PC, de ton OS et de ce qui tourne en plus de ton appli. Après, ça va toujours soulager ton CPU un minimum.

Après, j'imagine que si c'est pour apprendre ou si c'est un jeu qui demande beaucoup d'attention de la part du joueur, c'est pas bien grave si ça bouffe du proco ; y a pas mal de jeux en 2D dans le commerce qui bouffent 100% d'un coeur quoi qu'il arrive.

8
Général / Faire un set de Vector2
« le: Septembre 10, 2015, 09:26:21 pm »
Bonjour,

J'essaie dans un de mes codes de créer un std::set de Vector2i.

Mais seulement voilà ; le compilateur me crache dessus en disant que insert() n'appelle pas l'opérateur correctement :

no match for 'operator<' (operand types are 'const sf::Vector2<int>' and 'const sf::Vector2<int>')|

L'erreur se trouve dans stl_function.h et l'opérateur est appelé par ce code :

    std::set<sf::Vector2i>* res;

    for(int i = 0; i < taille_cote; i++){
        for(int j = 0; j < taille_cote; j++) {
            if(test_vertical(i,j)){
                for(int k = -2; k < 1; k++){
                    res->insert(sf::Vector2i(i,j+k)); //L'erreur est appelee d'ici
                }
            }

De ce que je comprends, insert appelle l'opérateur < qui n'est pas défini pour Vector2i. Y a t'il une solution pour contourner ça ?

Le but étant d'obtenir dans res, des Vector2i uniques, sans aucun doublon.
Est ce que passer par pair fonctionnerait ? Dois-je écrire moi même l'opérateur < pour Vector2i ?

J'utilise MinGW 4.8.1 (GCC) et la SFML 2.3.1 (compilée sans problème), donc impossible d'utiliser unordered_set.

Merci d'avance pour vos réponses.

Pages: [1]