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 - DrPapino

Pages: [1] 2 3 Suivante »
1
Général / Compilation statique
« le: Novembre 22, 2020, 09:30:51 am »
Bonjour :)

Je sèche complètement pour faire une compilation statique du fameux cercle vert..
L'objectif est de pouvoir exporter mon .exe à n'importe quel pour qu'il puisse l'exécuter même sans SFML d'installée.

Mon setup :
- Sublime Text 3
- GCC version 6.3.0
- MinGW DW32
- Version de SFML : toutes testées mais pour l'exemple partons sur la 2.5.1 / GCC 7.3.0 MinGW (DW2) - 32-bit

mon makefile :

# The location where SFML is installed
SFML_DIR=C:/SFML

# Location where SFML libraries are located
LIBDIR=$(SFML_DIR)/lib

# Arguments to pass to the compiler
CFLAGS=-I$(SFML_DIR)/include

# Set the rule that links the executable as the default
# This is the default because it is *first* in the file,
# not because of it's name!
default: compile

# Compile the source file
compile: main.cpp
        g++ -c main.cpp $(CFLAGS) -o main.o

run: main.cpp
        set PATH=%PATH%;C:/SFML/bin; & g++ main.o -o main.exe -L$(LIBDIR) -lsfml-graphics -lsfml-window -lsfml-system -lsfml-network & main.exe


static: main.cpp
        set PATH=%PATH%;C:/SFML/bin; & g++ main.o -o main.exe -DSFML_STATIC $(CFLAGS) -L$(LIBDIR) -lsfml-graphics-s -lsfml-window-s -lsfml-system-s -lfreetype -lopengl32 -lwinmm -lgdi32
 

mon main.cpp :

#include <SFML/Graphics.hpp>
#include <iostream>

int main()
{

    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}

la compilation "standard" et le run sont ok, mais la compilation statique me donne cette erreur :

main.o:main.cpp:(.text+0x7c): undefined reference to `_imp___ZN2sf6StringC1EPKcRKSt6locale'
main.o:main.cpp:(.text+0xa2): undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj'
main.o:main.cpp:(.text+0xde): undefined reference to `_imp___ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
main.o:main.cpp:(.text+0x115): undefined reference to `_imp___ZN2sf11CircleShapeC1Efj'
main.o:main.cpp:(.text+0x126): undefined reference to `_imp___ZN2sf5Color5GreenE'
main.o:main.cpp:(.text+0x130): undefined reference to `_imp___ZN2sf5Shape12setFillColorERKNS_5ColorE'
main.o:main.cpp:(.text+0x142): undefined reference to `_imp___ZNK2sf6Window6isOpenEv'
main.o:main.cpp:(.text+0x162): undefined reference to `_imp___ZN2sf6Window9pollEventERNS_5EventE'
main.o:main.cpp:(.text+0x182): undefined reference to `_imp___ZN2sf6Window5closeEv'
main.o:main.cpp:(.text+0x1af): undefined reference to `_imp___ZN2sf5ColorC1Ehhhh'
main.o:main.cpp:(.text+0x1ca): undefined reference to `_imp___ZN2sf12RenderTarget5clearERKNS_5ColorE'
main.o:main.cpp:(.text+0x1dd): undefined reference to `_imp___ZN2sf12RenderStates7DefaultE'
main.o:main.cpp:(.text+0x1f1): undefined reference to `_imp___ZN2sf12RenderTarget4drawERKNS_8DrawableERKNS_12RenderStatesE'
main.o:main.cpp:(.text+0x203): undefined reference to `_imp___ZN2sf6Window7displayEv'
main.o:main.cpp:(.text+0x229): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
main.o:main.cpp:(.text+0x273): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
main.o:main.cpp:(.text$_ZN2sf11CircleShapeD1Ev[__ZN2sf11CircleShapeD1Ev]+0xa): undefined reference to `_imp___ZTVN2sf11CircleShapeE'
main.o:main.cpp:(.text$_ZN2sf11CircleShapeD1Ev[__ZN2sf11CircleShapeD1Ev]+0x17): undefined reference to `_imp___ZTVN2sf11CircleShapeE'
main.o:main.cpp:(.text$_ZN2sf11CircleShapeD1Ev[__ZN2sf11CircleShapeD1Ev]+0x2a): undefined reference to `_imp___ZN2sf5ShapeD2Ev'
collect2.exe: error: ld returned 1 exit status
Makefile:24: recipe for target 'static' failed
mingw32-make: *** [static] Error 1
[Finished in 0.7s with exit code 2]
[cmd: ['mingw32-make', 'static']]
[dir: C:\Users\JeanLouis\Documents\Root\SFMLTest]
[path: "C:\Program Files\Java\jdk1.8.0_231\bin;";C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Skype\Phone\;C:\WINDOWS\System32\OpenSSH\;C:\MinGW\bin;C:\Users\JeanLouis\AppData\Local\Microsoft\WindowsApps;]

2
Réseau / hebergratuit et requête http
« le: Mars 26, 2017, 09:30:19 pm »
Bonjour :)

Je trafique un peu avec les requêtes http. J'ai un petit site, où l'on rentre dans des textbox un ID (d'une ville) et un nombre (d'habitants) associé. En cliquant sur un bouton OK, les données sont envoyées par POST à une page php, qui met à jour une base SQL.

index.html :

<!DOCTYPE html>
<html>
        <head>
                <title>Page Title</title>
        </head>
        <body>
                <form method="post" action="sql.php">
                         <p>ID <input type="text" name="id" /></p>
                         <p>Habitants <input type="text" name="habitants" /></p>
                        <input type="submit" value="OK"></p>
                </form>
        </body>
</html>

sql.php :

$id = $_POST['id'];
$habitants = $_POST['habitants'];

try { $bdd = new PDO('*********'); }
catch (Exception $e) { echo fail to connect; }

$req = $bdd->prepare('UPDATE table1 SET Habitants = :habitants WHERE ID = :id');
$req->execute(array(
        'habitants' => $habitants,
        'id' => $id,
        ));

En passant par index.html, tout se passe très bien. Mais j'aimerais passer par du c++ :

main.cpp :

#include <iostream>
#include <SFML/Network.hpp>

int main()
{
    sf::Http::Request request("sql.php", sf::Http::Request::Post);
    request.setBody("id=2&habitants=123");

    sf::Http http("http://www.thinkfeelcode.hebergratuit.net");
    sf::Http::Response response = http.sendRequest(request);

    if (response.getStatus() == sf::Http::Response::Ok)
        std::cout << response.getBody() << std::endl;
    else
        std::cout << "request failed" << std::endl;
       
    return 0;
}

Et là c'est le drame. Je reçois une réponse valide, mais qui ressemble à une redirection javascript, et surtout, qui ne prend pas tout en compte le body de ma requête et qui ajoute simplement "i=1" :

<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("106f21ea7eb7ee1eeb26f3ca060f25e3");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://www.thinkfeelcode.hebergratuit.net/sql.php?i=1";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html>

Le problème vient sans doute de mon hébergeur (hebergratuit), je ne sais pas comment le résoudre. Le problème en question ressemble fort à celui d'un sujet précédent :
https://fr.sfml-dev.org/forums/index.php?topic=20331.0

Avez-vous déjà utilisé cet hébergeur, et réussi à contourner le problème ?

Merci de vos retour. 

3
Discussions générales / Re : Norme SFML
« le: Août 07, 2016, 05:10:50 pm »
Génial ;D

Merci beaucoup !

4
Discussions générales / Norme SFML
« le: Août 07, 2016, 04:22:27 pm »
Bonjour,

Moi je me demandais si on pouvait trouver quelque part un document qui dresse la norme de codage que Laurent a utilisé pour la SFML, voilà :)

Merci de vos réponses !

5
Général / Re : Sublime Text - commande Linux
« le: Juin 22, 2016, 05:44:50 pm »
Re,

L'idée est là ouais, mais en fait après avoir fait plus de recherches le problème vient du fait qu'on ne peut exécuter qu'une commande pendant le build, et pas plus. Ta solution ne convient pas, parce que les virgules ne sont pas traduites par un "entrer", en gros. C'est comme si on écrivait tout à la suite, du coup la commande passe pas.

Il y a quand même une solution, je la présente au cas où :) Il faut créer un petit fichier Makefile, dans le répertoire où est présent le main.cpp.

Le fichier make :

SFML_DIR=/Volumes/DATA/SFML

LIBDIR=$(SFML_DIR)/lib

CFLAGS=-I$(SFML_DIR)/include

LIBS=-lsfml-graphics -lsfml-window -lsfml-system

default: sfml
        LD_LIBRARY_PATH=$(LIBDIR) ./sfml

sfml: main.o
        g++ -o sfml -L$(LIBDIR) $(LIBS) main.o

main.o: main.cpp
        g++ -c main.cpp $(CFLAGS) -o main.o

run: sfml
        LD_LIBRARY_PATH=$(LIBDIR) ./sfml

Voili voilou !

6
Général / Re : Sublime Text - commande Linux
« le: Juin 21, 2016, 10:45:14 pm »
Citer
Tu n'as même pas indiqué quelle erreur tu rencontrais.

Eh bien la première ligne ("cmd" : ["g++", "-c", "${file}", "-I/Volumes/DATA/SFML/include"]) crée mon main.o, comme je le lui demande. Jusque là, tout va bien. Je supprime mon fichier main.o, et je continue :

Quand j'ajoute la deuxième ligne ("cmd" : ["g++", "${file_path}/${file_base_name}.o", "-o", "sfml-app", "-L/Volumes/DATA/SFML/lib", "-lsfml-graphics", "-lsfml-window", "-lsfml-system"]) j'obtiens une erreur comme quoi main.o n'existe pas. Et effectivement, il semblerait qu'ajouter la deuxième ligne empêche la première de s'exécuter.

Qu'à cela ne tienne ! Je change le code en :
"cmd": ["g++", "${file}", "-I/Volumes/DATA/SFML/include", "-o", "${file_base_name}", "-L/Volumes/DATA/SFML/lib", "-lsfml-graphics", "-lsfml-window", "-lsfml-system"]
.. ce qui me crée un fichier main :)

On peut passer à l'étape suivante ! Je supprime ce fichier main, et j'écris :
"cmd": ["bash", "-c", "export LD_LIBRARY_PATH=/Volumes/DATA/SFML/lib"]
Et là c'est le drame, aucun fichier main n'est créé :'(

Peut-être que le problème vient du fait qu'il y a plusieurs commandes, alors qu'il n'en faudrait qu'une seule ?

Citer
Es-tu sûr que l'on puisse build à partir de cet éditeur

Ouaip, enfin c'est prévu pour quoi. On peut même créer nos propres builder, comme j'essaie de le faire ^^

7
Général / Re : Sublime Text - commande Linux
« le: Juin 21, 2016, 09:24:27 pm »
Dans la mesure où ça concerne aussi la SFML, je me disais que, peut-être, je pourrais trouver un bout de solution ici ;)

Jvais chercher autre part, alors :-[

8
Général / Sublime Text - commande Linux [RÉSOLU !]
« le: Juin 21, 2016, 09:16:16 pm »
Bonjour :D

Je délaisse XCode pour Sublime Text, avec le lot de petits tracas qu'entraine cette migration :)

En fait, je n'arrive pas à compiler les lib dynamiques de SFML. Ou plutôt j'y arrive en passant direct par mon terminal, mais pas depuis Sublime Text :o

Sur mon bureau, j'ai un petit main.cpp qui ouvre une fenêtre avec SFML, et je compile no problem en utilisant les commandes suivantes, depuis mon terminal :
cd desktop
g++ -c main.cpp -I/Volumes/DATA/SFML/include
g++ main.o -o sfml -L/Volumes/DATA/SFML/lib -lsfml-graphics -lsfml-window -lsfml-system
export LD_LIBRARY_PATH=/Volumes/DATA/SFML/lib && ./sfml

propre !

Sur Sublime Text, il faut aller modifier les préférences du build. J'ai donc écrit ces trois lignes de code, pensant que ça marcherait :

"cmd" : ["g++", "-c", "${file}", "-I/Volumes/DATA/SFML/include"],
"cmd" : ["g++", "${file_path}/${file_base_name}.o", "-o", "sfml-app", "-L/Volumes/DATA/SFML/lib", "-lsfml-graphics", "-lsfml-window", "-lsfml-system"],
"cmd" : ["export LD_LIBRARY_PATH=/Volumes/DATA/SFML/lib && ./sfml-app"]

... Mais en fait non !

Du coup je comprend pas trop ??? Qu'est-ce qu'ai-je fait de mal ? ;D

9
À tout hasard, ça ne viendrait pas de

render.display();
tiles->setTexture(render.getTexture());
target.draw(*tiles, states);
render.clear();
?

Tu fais display, puis draw, puis clear. Moi jferais plutôt quelque chose du genre clear, draw, display.


10
Graphique / Brouillard de guerre avec une sf::VertexArray
« le: Octobre 07, 2015, 04:33:02 pm »
Bonjour :)

Je suis en train d'implémenter un brouillard de guerre, comme sur cette image :
https://zalifalcam.files.wordpress.com/2014/07/13.png

Trois possibilités donc :
Noir : jamais exploré
Noir-transparent : pas dans le champs de vision
Transparent : dans le champs de vision

J'ai fait ça avec une sf::VertexArray, pour l'instant, mais des fois ça foire un peu, l'écran reste transparent à certains endroits après le passage de la souris, alors qu'il ne devrait plus l'être.

int main()
{
    sf::Texture texture;
    texture.loadFromFile(blabla...);
    sf::Sprite sprite;
    sprite.setTexture(texture);
   
    sf::VertexArray vertexArray(sf::Points);
   
    // On colorie tout en noir
    for (unsigned i=0; i<480; i++)
        for (unsigned j=1; j<=360; j++)
            vertexArray.append({sf::Vector2f(i,j),sf::Color(0,0,0,255)});
   
    sf::RenderWindow window(sf::VideoMode(480,360),"SFML window",sf::Style::None);
   
    sf::Event event;
   
    sf::Vector2i mousePosition;
   
    while (window.isOpen())
    {
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                window.close();
            }
           
            else if (event.type == sf::Event::KeyPressed)
            {
                if (event.key.code == sf::Keyboard::Escape)
                {
                    window.close();
                }
            }
           
            else if (event.type == sf::Event::MouseMoved)
            {
                // On colorie tout en "noir transparent" autour de l'ancienne position de la souris
                for (unsigned i=mousePosition.x-50; i<mousePosition.x+50; i++)
                    for (unsigned j=mousePosition.y-50; j<mousePosition.y+50; j++)
                        vertexArray[360*i+j].color.a = 150;
               
                // On colorie tout en transparent autour de la nouvelle position de la souris
                for (unsigned i=event.mouseMove.x-50; i<event.mouseMove.x+50; i++)
                    for (unsigned j=event.mouseMove.y-50; j<event.mouseMove.y+50; j++)
                        vertexArray[360*i+j].color.a = 0;
               
                mousePosition = sf::Mouse::getPosition(window);
            }
        }
       
        window.clear();
       
        window.draw(sprite);
        window.draw(vertexArray);
       
        window.display();
    }
   
    return 0;
}

Comment pourrais-je coder ça plus proprement ? Obligé de passer par OpenGL ?

:D

11
Merci de ton explication, Laurent. J'avais peur justement qu'avec le push_back le vector ne soit "déplacé" en mémoire, pour les raisons que tu dis. Je vais plutôt mettre des indices, du coup :)

Encore merci !

12
Bonjour,

Je code un petit HalfEdge. Voilà un code minimal :

#include <iostream>
#include <SFML/Graphics.hpp>

struct HalfEdge
{
    int x;
    int y;
    HalfEdge* next;
};

int main()
{
    std::vector<HalfEdge> m;
   
    m.resize(6);
   
    const int width = 600;
    const int height = 400;
   
    m[0] = {50,50,&m[1]};
    m[1] = {width,50,&m[2]};
    m[2] = {50,height,&m[0]};
    m[3] = {50,height,&m[4]};
    m[4] = {width,50,&m[5]};
    m[5] = {width,height,&m[3]};
   
    m.push_back({100,100,&m[0]});
   
    sf::VertexArray vertexArray(sf::Lines);
   
    for (unsigned i=0; i<m.size(); i++)
    {
        std::cout << m[i].x << "," << m[i].y << "," << m[i].next->x << "," << m[i].next->y << std::endl;
       
        vertexArray.append({sf::Vector2f(m[i].x,m[i].y),sf::Color(250,250,250,50)});
        vertexArray.append({sf::Vector2f(m[i].next->x,m[i].next->y),sf::Color(250,250,250,10)});
    }
   
    sf::RenderWindow window(sf::VideoMode(800,600), "SFML window");
   
    sf::Event event;
   
    while (window.isOpen())
    {
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed || sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
                window.close();
        }
       
        window.clear();
       
        window.draw(vertexArray);
       
        window.display();
    }
     
    return 0;
}
 

J'observe un comportement plutôt étrange : quand je n'ajoute pas les points à vertexArray, l'output est le suivant (tout bon)
50,50,600,50
600,50,50,400
50,400,50,50
50,400,600,50
600,50,600,400
600,400,50,400
100,100,50,50
Alors que quand je les ajoute, ça part en cacahuète :
50,50,600,50
600,50,50,400
50,400,1112014848,1112014848
50,400,0,184220410
600,50,0,1073741824
600,400,855309050,0
100,100,0,1073741824

Est ce un problème de la SFML ou du vector, je ne sais pas trop. Mais ça me dérange :P Quelqu'un a déjà eu ce problème ?

13
Réseau / Re : Envoi de texte Client->Serveur : un paquet par mot
« le: Juin 15, 2015, 07:40:17 am »
Ah bah jsuis un champion moi :)

Au top, merci !

14
Réseau / [Résolu]Envoi de texte Client->Serveur : un paquet par mot
« le: Juin 14, 2015, 09:21:32 pm »
Bonjour :)

J'ai un programme simple : le Client demande à l'utilisateur de saisir une chaine de caractère, puis le Client l'envoi au Serveur pour que celui ci l'affiche. Ça donne :

Coté Client :

#include <SFML/Network.hpp>
#include <iostream>

int main()
{
    // On ouvre un chemin vers l'adresse 127.0.0.1, port 530000
    sf::TcpSocket socket;
    socket.connect("127.0.0.1",53000);

    while (1)
    {
        // On crée un message
        std::string message;
        std::cin>>message;
       
        // On crée un paquet avec le message dedans
        sf::Packet packet;
        packet << message;
       
        // On envoie le paquet
        socket.send(packet);
    }
   
    // On ferme le chemin
    socket.disconnect();

    return 0;
}

Coté Serveur :

int main()
{
    // On écoute le port 53000
    sf::TcpListener listener;
    listener.listen(53000);

    // Si on trouve le client, on l'accepte
    sf::TcpSocket client;
    listener.accept(client);
   
    while (1)
    {
        sf::Packet packet;
   
        // On attend un packet (bloque)
        client.receive(packet);
       
        std::string data;
        packet >> data;
       
        // On l'affiche
        std::cout << "Nouveau paquet : " << data << std::endl;
    }
   
    // On arrête d'écouter le port 53000
    listener.close();
   
    return 0;
}

Le problème, c'est que quand je saisis "Hello World", le Serveur reçoit deux paquets : "Hello" et "World". Pas super pratique ! Est-ce un bug ou dois-je m'accommoder de cela ?

En tous cas, la SFML, c'est super cool 8) 8) 8)

15
Graphique / Re : linker error en utilisant openGL
« le: Septembre 18, 2014, 02:56:57 pm »
Super cool ça marche :D

Merci !

Pages: [1] 2 3 Suivante »