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.


Sujets - gaulois94

Pages: « Précédente 1 [2]
16
Bonsoirs,

voila je me pose une question, surement idiot pour vous mais pas pour moi : pourquoi vous mettez (dans les GUI que j'ai vu) vos Widgets en nonCopiable ? Je fais ma GUI en ce moment (ouai je suis lent à la faire, cela fait un moment x) ) et j'arrive bien à copier tout les Widgets que j'utilises jusqu'à présent. Alors pourquoi les mettre en non copiables ? Merci d'avance, cela m'aidera à construire la mienne beaucoup mieux ;) .

merci d'avance :D .

17
Général / intel_do_flush_locked failed: No such file or directory
« le: Août 25, 2012, 10:12:41 pm »
Hum, par où commencer ? Ah oui bonsoirs à tous :D . Aujourd'hui je suis confronté à un petit soucis dû surement à ma carte intel, et je me suis dis que vous seriez pourquoi.

En effet, j'ai voulu testé les performances d'un de mes programme sur un netbook pour voir comment ça allait. Je compile le programme, tout ce passe bien puis je l'execute. Là, une très belle erreur :
intel_do_flush_locked failed: No such file or directory

Vous vous dites que c'est peut être une erreur dans l'un de mes codes, ben figuré vous que ce code fonctionne parfaitement bien sur un autre de mes ordinateurs.

Voila, j'espère que vous saviez d'où peut bien venir ce problème :D .

Merci d'avance.

18
Graphique / sf::Text : plus de Font par défaut ?
« le: Août 25, 2012, 01:39:49 am »
Bonsoirs (ouai il est très tard là :p ),

je viens ici pour un trucs tout simple : pourquoi avoir retiré dans le constructeur de sf::Text une font par défaut ? (d'ailleurs la documentation ne doit plus être à jours) ? .

Merci d'avance :) .

19
Bonjours,

voila je poste ici pour dire que un sf::Image n'arrive pas à se détruire lorsque l'un de ses pixels soit transparent avec une image derrière. Je m'explique : Je déplace ma Windows comme ceci :
        guiml::Window window(sf::VideoMode(800, 600), std::string("teste"), NULL, 60, sf::Color::Black, guiml::Image(NULL, std::string("background.jpg")));

Je pense qu'il y a pas besoin de commenter mais je le fait : je créer une Windows de taille 800,600, de titre "teste" qui n'a pas de parent, avec un framerate de 60, une couleur noir pour le clean et une image en fond d'écran qui est background.jpg.

Mais la je rencontre un tout petit (gros ?) problème. Si déclare un sf::Sprite et que je souhaite que l'un de ses pixels soit transparent, je rencontre (grâce à gdb) l'erreur suivante :

(gdb) where
#0  0x00007ffff678e2c5 in _int_free () from /lib/libc.so.6
#1  0x00007ffff7bbcee0 in __gnu_cxx::new_allocator<unsigned char>::deallocate(unsigned char*, unsigned long) () from ../../lib/libGUIML.so
#2  0x00007ffff7bbce8e in std::_Vector_base<unsigned char, std::allocator<unsigned char> >::_M_deallocate(unsigned char*, unsigned long) () from ../../lib/libGUIML.so
#3  0x00007ffff7bbcddb in std::_Vector_base<unsigned char, std::allocator<unsigned char> >::~_Vector_base() () from ../../lib/libGUIML.so
#4  0x00007ffff7bbcd1d in std::vector<unsigned char, std::allocator<unsigned char> >::~vector() () from ../../lib/libGUIML.so
#5  0x00007ffff7bbcc3e in sf::Image::~Image() () from ../../lib/libGUIML.so
#6  0x00007ffff7bbb347 in guiml::Image::roundEdge(int) () from ../../lib/libGUIML.so
#7  0x000000000040119d in main ()

Je pense que la fonction roundEdge vous sera utile, d'ailleurs la voici :

void Image::roundEdge(int size)
        {
                if(m_sprite.getTexture())
                {
                        sf::Image image = m_sprite.getTexture()->copyToImage();

                        for(int i = 0; i != size; i++)
                        {
                                sf::Vector2f topleft = circle(i, size, size, size);
                                sf::Vector2f bottomleft = circle(i, size, m_sprite.getTexture()->getSize().y - size, size);

                                sf::Vector2f topright = circle(i + m_sprite.getTexture()->getSize().x - size, m_sprite.getTexture()->getSize().x - size, size, size);
                                sf::Vector2f bottomright = circle(i + m_sprite.getTexture()->getSize().x - size, m_sprite.getTexture()->getSize().x - size, m_sprite.getTexture()->getSize().y - size, size);

                                for(int j = 0; j < topleft.y; j++)
                                {
                                        sf::Color pixel = image.getPixel(i, j);
                                        pixel.a = 0;
                                        image.setPixel(i, j, pixel);
                                }

                                for(int j = m_sprite.getTexture()->getSize().y; j > bottomleft.x; j--)
                                {
                                        sf::Color pixel = image.getPixel(i, j);
                                        pixel.a = 0;
                                        image.setPixel(i, j, pixel);
                                }

                                for(int j = 0; j < topright.y; j++)
                                {
                                        sf::Color pixel = image.getPixel(i + m_sprite.getTexture()->getSize().x - size, j);
                                        pixel.a = 0;
                                        image.setPixel(i + m_sprite.getTexture()->getSize().x - size, j, pixel);
                                }

                                for(int j = m_sprite.getTexture()->getSize().y ; j > bottomright.x; j--)
                                {
                                        sf::Color pixel = image.getPixel(i + m_sprite.getTexture()->getSize().x - size, j);
                                        pixel.a = 0;
                                        image.setPixel(i + m_sprite.getTexture()->getSize().x - size, j, pixel);
                                }
                        }
                        setImage(image);
                }
        }
 

et voici la fonction circle :

sf::Vector2f circle(const float x, const float centerx, const float centery, const float size)
{
        float y1 = (2*centery + sqrt(4*(-(x-centerx)*(x-centerx)+size*size)))/2;
        float y2 = (2*centery - sqrt(4*(-(x-centerx)*(x-centerx)+size*size)))/2;
        return sf::Vector2f(y1, y2);
}

Je pense que le tout est assez clair :D . Je vous remercie beaucoup ;) . Si vous ne comprenez pas un bout de code (ce qui risque d'arriver), n'hésitez pas ;) .

20
Bonsoirs,

voila j'aimerai savoir si c'est possible de pouvoir modifié un sf::Sprite pixel par pixel sans que ce dernier possède de sf::Texture ? Imaginons que j'ai un Sprite qui ne possède pas de sf::Texture à qui je lui fait un setColor(). Le sprite pourra donc être représenté à l'écran. Comment faire pour modifier les pixels de ce sf::Sprite ? En effet avant, je dois passer par un sf::Image (obtenue grâce à un sf::Texture) pour modifier les pixels de mon image. C'est sympa c'est vrai mais lors de mon exemple précédent, il n'y a pas de sf::Texture donc je ne peux pas avoir de sf::Image. Comment faire alors ?

Merci d'avance ;) .

21
Graphique / sf::RenderTexture prends énormément de ressource CPU.
« le: Juin 27, 2012, 01:04:12 am »
Bonsoirs,

voila j'écris ce message pour signaller que plus une RenderTexture est grande, plus les ressources CPU utiliser le sont aussi. Pour vous le montrer, voici deux screens :
renderTexture petite (100/50)

 sa me prends 10% de mon CPU.

et maintenant le même code, avec comme renderTexture de taille (800/600).

et là ben sa me prends 41% de mon CPU !!! WTF :o J'utilises pourtant le même algorithme je vous le rassure ;) .

Sachez que si je créer un Button, je n'ai que 2% de mon CPU qui est utilisé (il y a tout une surcouche derrière), alors que pour ma Frame, sa me prends quand même jusqu'à 41% !!!

Bon c'est sympa les chiffres, mais on aimerai bien savoir d'où sa vient ce petit monde, et comme je suis gentil, voici comment est fait la gestion de la Frame :

main.cpp
#include "Widget.h"
#include "Button.h"
#include "Window.h"
#include "Frame.h"
#include "equation.h"
#include <iostream>

int main()
{
guiml::Window window(sf::VideoMode(800, 600), "teste");
guiml::Frame frame(&window, sf::FloatRect(0, 0, 800, 600), sf::Color::Blue, guiml::Image(), guiml::Label(NULL, std::string("teste")), sf::Color::Red); //création de la Frame, ayant pour parent window, de position(0, 0) et de taille(800, 600), de fond Bleu sans image derrière de titre "teste" à fond rouge.
while(window.isOpen())
{
window.update(); //là on update la fenêtre, et donc par la même occasion la Frame.
}
return 0;
}

Frame.cpp (Frame hérite de Widget et de RenderTexture).
void Frame::update(std::list<sf::Drawable*> &drawable)
{
if(m_isDrawing) //si on veut dessiner la Frame
{
if(isMoving() && getEventManager()) //si le bouton rouge est sélectionner et que le parent racine est une fenêtre (en gros si Frame est dans une WIndow)
{
sf::Vector2f newMousePosition = getEventManager()->getMousePosition();
setPosition((newMousePosition.x/m_multiplicateMousePos.x)-m_mousePos.x, (newMousePosition.y/m_multiplicateMousePos.y)-m_mousePos.y); //m_multiplicateMousePos est là pour gérer les redimensionnement de la fenêtre (si la fenêtre passe de 800/600 à 1200/1000 par exemple, la souris sera a des positions différentes. Le multiplicate est là pour pallier au problème).
}
for(std::list<Widget*>::iterator it = m_child.begin(); it != m_child.end(); ++it) //On bouge tout les fils en arrière. Normale, quand on donne une position, on le donne relativement à la Frame, mais pour les évènements de la souris, la position doit être relatifs à la fenêtre.
(*it)->move(m_virtualPos.x, m_virtualPos.y);

clear(m_backgroundColor);
std::list<sf::Drawable*> drawableForFrame; //List qui contiendra les drawable que la Frame déssinera (ici c'est le trucs rouge + le titre).
Widget::update(drawableForFrame); //on update le Button (dans le screen, il n'y a qu'un Button : c'est le trucs rouge en haut qui permet de déplacer la Frame).
show(drawableForFrame);
drawable.push_back(&m_spriteFrame); //drawable est la list de Drawable que Window déssinera.

for(std::list<Widget*>::iterator it = m_child.begin(); it != m_child.end(); ++it) //on remet tout le monde en place.
(*it)->move(-m_virtualPos.x, -m_virtualPos.y);
}
}

void Frame::show(std::list<sf::Drawable*> &drawable)
{
for(std::list<sf::Drawable*>::iterator it = drawable.begin(); it != drawable.end(); ++it) //on dessiner ce que contient drawable.
draw(*(*it));
display();
m_spriteFrame.setTexture(getTexture()); //n'oubliez pas que Frame hérites de RenderTexture.
m_spriteFrame.setPosition(sf::Vector2f(m_virtualPos.x, m_virtualPos.y)); Et on place tout à la bonne position.
        }

Bon ben voila, je crois que j'ai suffisamment documenté le code pour que vous le compreniez rapidement ;) . J'aimerai donc savoir pourquoi plus la taille de la Frame augmente, plus les ressources CPU sont élevées.

Merci d'avance ;) .

22
Graphique / Shape::getTexture() return NULL
« le: Mai 25, 2012, 09:46:44 pm »
Bonsoirs,

alors voila, je souhaite créer une image à partir d'une Shape (normale quoi :) ), et je rencontre un petit bug au niveau de Shape::getTexture() que je vais vous illustrer avec le code suivant :

sf::RectangleShape shape(sf::Vector2f(rect.width, title.getSize().y));
                shape.setFillColor(backgroundTitle); //backgroundTitle est une couleur reçu en paramètre de cette fonction
                shape.setPosition(getPosition().x, getPosition().y);

                sf::Sprite sprite;
                if(shape.getTexture()) //sa return NULL
                        sprite.setTexture(*(shape.getTexture()));

Voila, je pense que c'est tout ;) . Merci d'avance :)

ps : j'utilise la sfml2.0 (j'imagine que c'était simple à trouver, non ? :) ).

23
Bonjours,

alors voila, dans ma GUI, j'ai créé la classe Frame qui permet de créer des "petites fenêtres". Comme tout fenêtre, je laisse la possibilité de la déplacer avec la souris !!!

Mais voila, lors du déplacement, la Frame va beaucoup moins vite que ma souris !!! . Pour vous montrez cela, voici une petite vidéo qui montre comment fonctionne le tout : http://www.youtube.com/watch?v=PHNHG8KLR40&feature=youtu.be

Maintenant que tout est dit, voici comment le tout fonctionne en interne ;) (je ne vous met que les fonctions appelé pour faire ce déplacement ;) ) :

[#include "Widget.h"
#include "Button.h"
#include "Window.h"
#include "Frame.h"
#include <iostream>

int main()
{
        guiml::Window window(sf::VideoMode(800, 600), "teste"); //création de la fenêtre
        guiml::Frame frame(&window, sf::IntRect(100, 100, 550, 400), sf::Color(0, 255, 255), guiml::Image(), guiml::Label(NULL, std::string("Teste")), sf::Color(255, 0, 0)); //définition de la Frame
        while(window.isOpen())
        {
                window.update();
        }
        return 0;
}/code]

EventManager.cpp
[code=cpp]void EventManager::update()
{
        //du code

        while(w->pollEvent(m_event)) //w est un pointeur vers la classe Window.
        {
                if(m_event.type == sf::Event::KeyReleased)
                        if(m_event.key.code < static_cast<int>(NBR_KEYS))
                        {
                                m_keys[m_event.key.code] = false;
                                m_isInputKey[m_event.key.code] = false;
                        }

                if(m_event.type == sf::Event::KeyPressed)
                        if(m_event.key.code < static_cast<int>(NBR_KEYS))
                        {
                                m_isInputKey[m_event.key.code] = true;
                                m_keys[m_event.key.code] = true;
                                m_hasPressedKeyKey = true;
                        }

                if(m_event.type == sf::Event::MouseButtonReleased)
                        if(m_event.mouseButton.button < static_cast<int>(NBR_CLICS))
                        {
                                m_mouseClicked[m_event.mouseButton.button] = m_isInputMouse[m_event.mouseButton.button] = false;
                        }

                if(m_event.type == sf::Event::MouseButtonPressed)
                        if(m_event.mouseButton.button < static_cast<int>(NBR_CLICS))
                        {
                                m_isInputMouse[m_event.mouseButton.button] = true;
                                m_mouseClicked[m_event.mouseButton.button] = true;
                                m_hasPressedKeyMouse = true;
                        }
                //encore du code
        }
 //du code
}

Et on arrive à la classe Frame.cpp
void Frame::update(std::list<sf::Drawable*> &drawable)
        {
                if(m_isDrawing)
                {
                        std::cout << m_isMoving << std::endl; //permet de savoir si la frame bouge ou non.
                        if(isMoving()) //la condition du problème.
                        {
                                sf::Vector2i oldMousePos = getEventManager()->getOldMousePosition();
                                sf::Vector2i mousePos = getEventManager()->getMousePosition();
                                move(mousePos.x - oldMousePos.x, mousePos.y - oldMousePos.y);
                        }
                        //du code qui ne doit pas servir à grand chose
                }
                 //du code
        }

Bon, j'imagine qu'il vous manque des .h pour vous y repérer (une sorte de doc), alors les voici :

Window.h
#ifndef DEF_WINDOW
#define DEF_WINDOW

#include "EventManager.h"
#include "Image.h"
#include "Render.h"

namespace guiml
{
        class Window : public Render, public sf::RenderWindow
        {
        public:
                Window(const sf::VideoMode &mode, const std::string &title, Widget *parent = NULL, unsigned int framerateLimit = 60, const sf::Color &backgroundColor = sf::Color::Black, const Image &backgroundImage = Image());
                virtual ~Window();

                void update();
                void update(std::list<sf::Drawable*> &drawable); //update all widgets and the event
                void show(std::list<sf::Drawable*> &drawable); //draw the window

                void setPosition(int x, int y);
                void setSize(int x, int y);
                virtual void setTitle(const std::string &title);
                void setView(const sf::View &view);
                void resetView();

                virtual EventManager* getEventManager() const;
                unsigned int getFramerate();
                virtual void resizeWidget(const sf::Vector2i& defaultWindowSize, const sf::Vector2i& newWindowSize);
        protected:
                EventManager *m_event;
                float m_framerate;
        };
}

#endif

Widget.h
#ifndef DEF_WIDGET
#define DEF_WIDGET

#include <SFML/Graphics.hpp>
#include <list>
#include <iostream>
#include <stdexcept>
#include "EventManager.h"

namespace guiml
{
        class Widget
        {
        public:
                Widget(Widget *parent, const sf::IntRect &rect = sf::IntRect(0, 0, 0, 0));
                Widget(const Widget &copy);

                virtual ~Widget();

                virtual void addChild(Widget *child, int pos = -1); //add a child of the widget
                void setParent(Widget *parent, int pos = -1); //set parent of the widget
                void removeChild(Widget *child); //remove one child of the widget
                virtual void drawWidget(bool drawing); //You can, if you want, draw or don't draw the widget
                void drawAllChild(bool drawing); //it simular that DrawWidget but is for all Children.

                virtual void update(std::list<sf::Drawable*> &drawables); //Update all Children of the Widget

                virtual void setPosition(const sf::Vector2i &newPos);
                virtual void setPosition(int x, int y);
                virtual void setSize(const sf::Vector2i &newSize);
                virtual void setSize(int x, int y);
                void move(int x, int y);
                void move(const sf::Vector2i &moving);
                void addSize(const sf::Vector2i &addingSize);
                void addSize(int x, int y);
                virtual void scale(float x, float y);
                virtual void scale(const sf::Vector2f &scaling);
                virtual void scale(float x);
                void moveAllChild(bool movingAllChild);

                bool getMovingAllChild() const;

                bool isDrawing() const; //boolean for know if this Widgets drawing or no.
                bool isChild(const Widget *child);
                bool hasParent() const;
                virtual EventManager* getEventManager() const; //get de EventManager who will be use for all of children.

                const sf::Vector2i& getPosition() const;
                const sf::Vector2i& getVirtualPosition() const;
                const sf::Vector2i& getSize() const;
                const sf::Vector2i& getVirtualSize() const;

                virtual sf::IntRect getRect() const;
                virtual sf::IntRect getVirtualRect() const;

                virtual void setRect(const sf::IntRect &rect);
                virtual Widget& operator=(const Widget &copy);
                virtual void resizeWidget(const sf::Vector2i& defaultWindowSize, const sf::Vector2i& newWindowSize);
                virtual Widget* copy() const;
        protected:
                std::list <Widget*> m_child;
                Widget *m_parent;
                bool m_isDrawing;
                sf::Vector2i m_pos;
                sf::Vector2i m_size;
                sf::Vector2i m_virtualPos;
                sf::Vector2i m_virtualSize;
                bool m_movingAllChild;
        };
}

#endif

EventManager.h
#ifndef DEF_EVENTMANAGER
#define DEF_EVENTMANAGER

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

const unsigned int NBR_KEYS = 321;
const unsigned int NBR_CLICS = 3;

class EventManager
{
public:
        EventManager(sf::Window *win);
        ~EventManager();
        void update(); //Update events
        void setDefaultWindowSize(const sf::Vector2i& defaultWindowSize);

        bool getPressedKey(unsigned int choice) const; //get the key who corresponds of the choice
        bool getOnePressedKey(unsigned int choice) const;
        const sf::Uint32& getText() const;
        bool isEnteredText() const;
        bool getMouseClicked(unsigned int choice) const; //get the key of the mouse who corresponds of the choice
        bool getOneMouseClicked(unsigned int choice) const;
        const sf::Vector2i &getMousePosition() const; //get the position of the mouse
        const sf::Vector2i &getOldMousePosition() const;
        template <typename T>
        bool isMouseInRect(const sf::Rect<T> &rect) const //See if the mouse is in the area of rect.
        {
                if(m_mousePos.x > rect.left
                && m_mousePos.x < rect.left + rect.width
                && m_mousePos.y > rect.top
                && m_mousePos.y < rect.top + rect.height)
                        return true;
                return false;
        }

        float getElapsedTime() const; //Return the time sell between two frames in microSeconds
        const sf::Event& getEvent() const;
        bool hasPressedKeyMouse() const;
        bool hasPressedKeyKey() const;
        bool windowIsResize() const;
        const sf::Vector2i& getNewWindowSize() const;
        const sf::Vector2i& getOldWindowSize() const;
        const sf::Vector2i& getDefaultWindowSize() const;
private:
        sf::Window *w;
        sf::Event m_event;
        bool m_keys[NBR_KEYS];
        sf::Uint32 m_text;
        bool m_enteredText;
        bool m_mouseClicked[NBR_CLICS];
        sf::Vector2i m_mousePos;
        sf::Vector2i m_oldMousePos;
        float m_elapsedTime;
        sf::Clock m_clock;
        bool m_isInputKey[NBR_KEYS];
        bool m_isInputMouse[NBR_CLICS];
        bool m_hasPressedKeyMouse;
        bool m_hasPressedKeyKey;
        bool m_isResize;
        sf::Vector2i m_newSize;
        sf::Vector2i m_oldSize;
        sf::Vector2i m_defaultSize;
};

#endif

Button.h
#ifndef DEF_BUTTON
#define DEF_BUTTON

#include "Widget.h"
#include "Image.h"
#include "Label.h"

namespace guiml
{
        class Button : public Widget
        {
        public:
                #include "SurchargeMethode.h"
                //-----------------------------------All constructors for various parameters-------------------------------------//
                Button(Widget *parent, const Label &text, const sf::IntRect &rect = sf::IntRect(0, 0, 0, 0));
                Button(Widget *parent, const Image &image, const sf::IntRect &rect = sf::IntRect(0, 0, 0, 0));
                Button(Widget *parent, const Label &text, const Image &image, const sf::IntRect &rect = sf::IntRect(0, 0, 0, 0));
                Button(Widget *parent);
                Button();
                Button(const Button &copy);
                //-------------------------------------------End of constructors--------------------------------------------//

                virtual void update(std::list<sf::Drawable*> &drawable);
                bool cursorInButton();
                void lightUpDrawable(bool lighten = true);

                //------------------------------------------Mutateurs---------------------------------------------------//
                virtual void drawWidget(bool drawing);
                void setPosition(int posx, int posy);
                void setSize(int sizex, int sizey);
                void setBackground(const Image &image);
                void setLabel(const Label &string);
                void selectIt(bool select);
                void activedIt(bool actived);

                void setKeyboardWhoActived(const sf::Keyboard::Key &key);
                void setClickMouseWhoActived(const sf::Mouse::Button &mouseButton);
                void setCharacterSize(unsigned int newsize);

                //-----------------------------------------End of Mutateurs--------------------------------------------//


                const Label* getLabel() const;
                const Image* getBackground() const;
                const unsigned int getKeyboardWhoActived() const;
                const unsigned int getClickMouseWhoActived() const;

                bool hasImage()const ;
                bool hasLabel() const ;
                bool isSelect() const ;
                bool isActived() const ;

                Button& operator=(const Button &copy);
                Widget* copy() const;

        protected:
                void centerLabel(); //Center the Label with regard to the background
                bool m_hasBackground;
                bool m_hasLabel;

                Image m_background;
                Label m_text;
                Image m_backgroundLighten;
                Label m_textLighten;
                Image *m_currentBackground;
                Label *m_currentLabel;
                bool m_isSelect;
                bool m_isSelectCopy;

                unsigned int m_howActivedKeyboard;
                unsigned int m_howActivedClickMouse;
                bool m_isActived;
        };
}

#endif

et enfin Frame.h
#ifndef DEF_FRAME
#define DEF_FRAME

#include "Label.h"
#include "Button.h"
#include "Render.h"

namespace guiml
{
        enum PosText
        {
                CENTER,
                RIGHT,
                LEFT
        };

        class Frame : public Render, public sf::RenderTexture
        {
        public:
                Frame(Widget *parent, const sf::IntRect &rect, const sf::Color &backgroundColor = sf::Color::Black, const Image &backgroundImage = Image(), const Label &title = Label(), const sf::Color &backgroundTitle = sf::Color(255, 255, 255, 255));

                void update(std::list<sf::Drawable*> &drawable);
                void show(std::list<sf::Drawable*> &drawable);

                void setTitle(const Label &title);
                void setTitle(const std::string &title);
                void setSize(int x, int y);
                void setPosition(int x, int y);
                void setBackgroundTitle(const sf::Color &colorTitle);
                void setRectMovingFrame(const sf::IntRect &rect);
                void setTitlePos(const PosText &posTitle);
                void setBackgroundImage(const Image &backgroundImage);
                void setView(const sf::View &view);
                void resetView();

                const Label& getLabelTitle() const;
                sf::IntRect getRectMoveFrame() const;
                sf::FloatRect getViewport() const;

                const PosText& positionTitle() const;
                bool isMoving();
        protected:
                void testIsMoving();
                sf::RectangleShape m_backgroundTitle;
                sf::Sprite m_spriteFrame;
                guiml::Label m_title;
                Button m_buttonMoveFrame;
                PosText m_posTitle;
                bool m_isMoving;
                bool m_hasAddChild;
        };
}

#endif

Voila, je pense avoir terminé :D . Merci d'avance ;)

24
Bonsoirs,

Voila comme vous le savez, ils existent les views dans la SFML. Je suis actuellement sur la dernière SFML 2.0.

Ce que j'aimerai savoir est la chose suivante : es-ce que une seul sf::RenderWindow::setView suffit, et la classe va mettre à jours la view tout seul, ou doit-on à chaque fois faire des setView pour réactualiser la vue ?

Voila, merci d'avance ;) .

25
Graphique / Faire des Move sur des sf::Drawable
« le: Avril 08, 2012, 09:55:34 pm »
Bonsoirs,

Alors voila aujourd'hui je suis confronté à un gros problème avec la sfml : impossible de faire bouger des sf::Drawable. Voici mon code (plus facile à expliquer comme sa :p ) :

        std::list<sf::Drawable*> drawableForFrame;
Widget::update(drawableForFrame);

Ici, ma classe va récupérer les sf::Drawable des Widget fille (comme des Buttons, ou des cases à coché), grâce à la méthode Widget::update (Frame hérite de Widget). Jusque là pas de soucis. Mais Frame hérite aussi de sf::RenderTexture (normale j'ai envie de dire). Sauf que la position d'un sprite par exemple entre un sf::RenderWindow (ma fenêtre), et sf::RenderTexture n'est pas du tout pareils. Disons que Frame c'est une petite fenêtre dans une grande fenêtre.

Brefs vous voyez ce n'est pas correcte. Ce que j'aimerai faire, c'est changé la position, les faire bouger plus exactement des sf::Drawable reçu. Mais impossible de savoir comment x) .

Si ce n'est pas clair (et je sais que sa ne l'est pas), n'hésitez pas à me demander de ré expliquer quelque chose.

Merci d'avance.

26
Projets SFML / GUIML et PYGUIML : une GUI pour la SFML et pour PYSFML
« le: Avril 06, 2012, 10:19:29 pm »
Bonsoirs,

Voila aujourd'hui je vais vous présenter la GUIML et PYGUIML : une GUI adapté pour le C++ et pour python. Pour le moment, la GUI ne fait pas grand chose : elle gère les fenêtre, les images, les Labels, les Layouts(pas encore finis), les checkBoxs  et à moitié des petites fenêtres (des RenderTexture).

GUIML est la version C++ de la GUI. Elle n'est qu'à c'est début mais fonctionne pour le moment. Il fonctionne avec la dernière version en date de ce message de la sfml 2.0. PYSFML lui est la version python de la GUI. Elle est écrite en python 3 et est la dernière version en date de ce message de pysfml.

Pour le moment, la GUI ne me servira qu'à faire des jeux avec la SFML, mais je me suis dit que cela pourrai aussi vous servir. Je ne peux pas encore vous donner de réels screenshot ou encore de code de teste car elle n'est pas assez développer pour. Cependant, j'espère bien l'avancé rapidement :) . Voila j'espère pouvoir l'améliorer rapidement, et vous présenter une GUI fonctionnels dans peu de temps :) .

Pourquoi avoir construite cette GUI ? Par plaisir et surtout je voulais utilisé ma propre GUI, et non celui d'un autre. Cela est un très bonne exercice et je pourrais mieux exploiter ma GUI que celui d'une autre. Je pourrai l'améliorer selon mes envie et s'il y a un bug, le corriger le plus rapidement. De plus, je n'ai pas vraiment vu de GUI pour pysfml.Brefs que des raisons pour créé la mienne :D .

Voici maintenant le code de la GUI : http://gaulois94.rd-h.fr/Programme/GUIML.zip Pour ce qui est de PYGUIML, ne vous inquiétez pas : je vais implémenter très rapidement les classes manquantes.

Pour ce qui est de la suite, je compte créer juste après les Slider ainsi que des TextBox. Je créerai sans doute aussi un petit incrémenter qui me sera très utile pour le jeux. Après cela ben je pense que j'aurai toutes les classes de bases que j'utiliserais.

J'ai dit que je ne donnerai pas pour le moment de code d'exemple, mais je vous donne quand même le code minimal ;) :

Le code en python :
#!/usr/bin/python3.2
# -*- coding:Utf-8 -*

from Window import Window
from Image import Image
import sfml as sf

window = Window(sf.VideoMode(800, 600), b'teste')
image = Image(window, b'Mario.png')
while(window.open):
window.update()

Et le même en C++ :
#include "Image.h"
#include "Window.h"

#include <iostream>

int main()
{
guiml::Window window(sf::VideoMode(800, 600), "teste");
        guiml::Image image(&window, std::string("Mario.png")); //ici on est obligé de mettre std::string car le programme prends aussi des sf::String qui peut être écrite avec de simple guillemets.
while(window.isOpen())
{
window.update();
}
return 0;
}

Ce simple code dessine une image (ici un mario) dans une fenêtre de 800*600 nommé teste.

Si jamais vous ne comprenez pas un bout de code, demander le moi : je vous répondrai. En effet, le code n'est pas trop documenter, ce qui risque de jouer des tours plus tard. Je compte bien entendu la documenter plus tard (ben oui il faut bien que vous sachiez comment l'utiliser :p ) bien que les noms des fonctions sembles quand même assez explicite. Voila, n'hésitez pas à me conseiller pour la GUI, faire des critiques et proposer des améliorations :D .

Cordialement, Gaulois94 .

27
Python / PYGUIML : Une GUI très lente
« le: Avril 05, 2012, 07:49:09 pm »
Bonjours,

voila je créé en ce moment une GUI en C++ et je commence à la porté en python (la réécris totalement). Cependant, comparé à ma GUI en C++, celle ci est extrêmement lente : elle ne dépasse pas les 20 FPS pour afficher une simple image (alors imaginé plusieurs images).

Voila le code de la GUI : http://gaulois94.rd-h.fr/Programme/PYGUIML.zip . Le code démarre de setup.py . Widgets est la classe de base pour la création de Widget. Pour le moment, je n'utilise que Widget.py, Image.py et Window.py . Ne vous occupez que des méthode update (le reste n'est pas trop importants, sauf peut être les constructeurs ;) ). Voici aussi pour vous aidez le même code (un peu près ;) ) écrit en C++ : http://gaulois94.rd-h.fr/Programme/GUIML.zip. Regardez encore une fois seulement les classes Widgets, Image et Window (je n'ai pas mis de fichier teste car c'est exactement le même que celui en python, mais écrit en C++ ;) ).

Merci d'avance :D .

28
Bonsoirs,

voila j'aurai besoin de la méthode copyToImage de la classe Texture, mais je ne la retrouve pas dans la documentation. Quelqu'un serai capable de me dire où je pourrais la trouver s'il vous plait ?

merci d'avance :) .

29
Bonsoirs,

voila je recontre un petit problème lors de la tentative de compilation de pysfml 2 building python 3. Je pense que cela est dû à la version de SFML 2 qui date d'aujourd'hui. Voici le code erreur :

python3.2 setup3k.py build_ext

If the build fails, run patch.py and try again
----------------------------------------------

running build_ext
building 'sfml' extension
gcc -pthread -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include/python3.2m -c src/sfml.cpp -o build/temp.linux-x86_64-3.2/src/sfml.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]
src/sfml.cpp: In function ‘PyObject* __pyx_pf_4sfml_9Transform_6matrix___get__(PyObject*)’:
src/sfml.cpp:7848:8: warning: variable ‘__pyx_v_i’ set but not used [-Wunused-but-set-variable]
src/sfml.cpp: In function ‘PyObject* __pyx_pf_4sfml_12RenderTarget_3convert_coords(PyObject*, PyObject*, PyObject*)’:
src/sfml.cpp:33510:116: error: no matching function for call to ‘sf::RenderTarget::convertCoords(unsigned int&, unsigned int&)’
src/sfml.cpp:33510:116: note: candidates are:
/usr/local/include/SFML/Graphics/RenderTarget.hpp:152:14: note: sf::Vector2f sf::RenderTarget::convertCoords(const Vector2i&) const
/usr/local/include/SFML/Graphics/RenderTarget.hpp:152:14: note:   candidate expects 1 argument, 2 provided
/usr/local/include/SFML/Graphics/RenderTarget.hpp:177:14: note: sf::Vector2f sf::RenderTarget::convertCoords(const Vector2i&, const sf::View&) const
/usr/local/include/SFML/Graphics/RenderTarget.hpp:177:14: note:   no known conversion for argument 1 from ‘unsigned int’ to ‘const Vector2i& {aka const sf::Vector2<int>&}’
src/sfml.cpp:33522:143: error: no matching function for call to ‘sf::RenderTarget::convertCoords(unsigned int&, unsigned int&, sf::View&)’
src/sfml.cpp:33522:143: note: candidates are:
/usr/local/include/SFML/Graphics/RenderTarget.hpp:152:14: note: sf::Vector2f sf::RenderTarget::convertCoords(const Vector2i&) const
/usr/local/include/SFML/Graphics/RenderTarget.hpp:152:14: note:   candidate expects 1 argument, 3 provided
/usr/local/include/SFML/Graphics/RenderTarget.hpp:177:14: note: sf::Vector2f sf::RenderTarget::convertCoords(const Vector2i&, const sf::View&) const
/usr/local/include/SFML/Graphics/RenderTarget.hpp:177:14: note:   candidate expects 2 arguments, 3 provided
src/sfml.cpp: At global scope:
src/sfml.cpp:27597:39: warning: ‘__pyx_obj_4sfml_Vertex* __pyx_f_4sfml_wrap_vertex_instance(sf::Vertex*)’ defined but not used [-Wunused-function]
error: command 'gcc' failed with exit status 1

Voila, merci d'avance :)

Pages: « Précédente 1 [2]