Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Problem z przesunięciem widoku za pomocą myszki

Ostatnio zmodyfikowano 2014-02-17 18:50
Autor Wiadomość
domin568
Temat założony przez niniejszego użytkownika
[SFML] Problem z przesunięciem widoku za pomocą myszki
» 2014-02-13 12:25:01
Witam, chciałem napisać prosty program z wykorzystaniem zdefiniowanego widoku przez siebie (żeby móc go zoomować i przesuwać), jednak debugger wyrzuca mnie przy linijce :
if( event.type == sf::Event::MouseButtonPressed )
 (żadnego błędu kompilacji), oraz moja aplikacja się nie uruchamia, nie mam żadnego komunikatu typu AccessViolationException (piszę na Macu, nie znam się na tym systemie jeszcze ) Tutaj kod :
C/C++
#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>
#include "ResourcePath.hpp"

int main( int, char const ** )
{
    sf::Event event;
   
    sf::RenderWindow window( sf::VideoMode( 800, 600 ), "SFML window" );
    sf::Sprite image;
    sf::Texture imageTex;
    imageTex.loadFromFile( resourcePath() + "757-11.jpg" ); // mac'owski odpowiednik
    image.setTexture( imageTex );
    window.setFramerateLimit( 60 );
   
    sf::View widok;
   
    widok.setCenter( 0, 0 );
    widok.setSize( window.getSize().x, window.getSize().y );
    sf::Vector2f vecMove( 0, 0 );
    sf::Vector2f positionMouseAfterClick( 0, 0 );
   
    while( window.isOpen() )
    {
        sf::Vector2f posMouse( sf::Mouse::getPosition( window ).x, sf::Mouse::getPosition( window ).y );
       
        if( sf::Mouse::isButtonPressed( sf::Mouse::Button::Left ) )
        {
            widok.move( posMouse.x - positionMouseAfterClick.x, posMouse.y - positionMouseAfterClick.y ); // miało umożliwić przesuwanie widoku za pomocą myszki
        }
       
        while( window.pollEvent( event ) )
        {
            if( event.type == sf::Event::MouseButtonPressed ) // na tej linijce debugger stawia breakpointa
            {
                positionMouseAfterClick.x = posMouse.x;
                positionMouseAfterClick.y = posMouse.y;
            }
            //dalsza część kodu...
        }
       
        window.clear();
       
        window.setView( widok );
       
        window.draw( image );
       
        window.display();
    }
   
    return EXIT_SUCCESS;
}
P-104576
pekfos
» 2014-02-15 16:17:04
C/C++
//dalsza część kodu...
Podaj.
P-104678
domin568
Temat założony przez niniejszego użytkownika
» 2014-02-17 15:57:31
C/C++
#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>
#include "ResourcePath.hpp"
//(resourcePath() + "icon.png")
int main( int, char const ** )
{
    sf::Event event;
   
    sf::RenderWindow window( sf::VideoMode( 800, 600 ), "SFML window" );
    sf::Sprite image;
    sf::Texture imageTex;
    imageTex.loadFromFile( resourcePath() + "757-11.jpg" );
    image.setTexture( imageTex );
    window.setFramerateLimit( 60 );
    window.setVerticalSyncEnabled( true );
   
    sf::View widok;
   
    widok.setCenter( 0, 0 );
    widok.setSize( window.getSize().x, window.getSize().y );
    sf::Vector2f vecMove( 0, 0 );
    sf::Vector2f positionMouseAfterClick( 0, 0 );
   
    while( window.isOpen() )
    {
        sf::Vector2f posMouse( sf::Mouse::getPosition( window ).x, sf::Mouse::getPosition( window ).y );
       
        if( sf::Mouse::isButtonPressed( sf::Mouse::Button::Left ) )
        {
            widok.move( posMouse.x - positionMouseAfterClick.x, posMouse.y - positionMouseAfterClick.y ); // miało umożliwić przesuwanie widoku za pomocą myszki
        }
       
        while( window.pollEvent( event ) )
        {
            if( event.type == sf::Event::MouseButtonPressed )
            {
                positionMouseAfterClick.x = posMouse.x;
               
                positionMouseAfterClick.y = posMouse.y;
               
                widok.setCenter( positionMouseAfterClick.x, positionMouseAfterClick.y );
            }
            if( event.type == sf::Event::MouseButtonReleased )
            {
                positionMouseAfterClick.x = widok.getCenter().x;
               
                positionMouseAfterClick.y = widok.getCenter().y;
            }
           
            if( event.type == sf::Event::MouseWheelMoved && event.mouseWheel.delta > 0 )
            {
                std::cout << event.mouseWheel.delta << std::endl;
                widok.zoom( 1.1 );
            }
            if( event.type == sf::Event::MouseWheelMoved && event.mouseWheel.delta < 0 )
            {
                std::cout << event.mouseWheel.delta << std::endl;
                widok.zoom( 0.9 );
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Key::W ) )
            {
                widok.move( 0, - 20 );
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Key::S ) )
            {
                widok.move( 0, 20 );
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Key::D ) )
            {
                widok.move( 20, 0 );
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Key::A ) )
            {
                widok.move( - 20, 0 );
            }
            if( event.type == sf::Event::Closed )
            {
                window.close();
            }
           
            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape )
            {
                window.close();
            }
        }
       
        window.clear();
       
        window.setView( widok );
       
        window.draw( image );
       
        window.display();
    }
   
    return EXIT_SUCCESS;
}
P-104779
DejaVu
» 2014-02-17 17:07:03
Jak się pojawiają dziwne błędy podczas uruchomienia aplikacji to zazwyczaj rebuild solucji pomaga. Jeżeli rebuild nie pomoże to masz jakiś błąd w kodzie.
P-104783
domin568
Temat założony przez niniejszego użytkownika
» 2014-02-17 18:21:08
Bardzo dziwne, nic nie zmieniając w kodzie spróbowałem skompilować od nowa projekt, i bez żadnych błędów się skompilowało, działa, poprosiłem Was o pomoc, bo myślałem że pewnych technik jakie ja robie nie można stosować, i wyrzuca debugerra, mimo to to dzięki :)
P-104792
DejaVu
» 2014-02-17 18:50:54
Po prostu kompilator źle poskładał kod - zdarza mu się to co jakiś czas. Skoro problem rozwiązany to zamykam.
P-104803
« 1 »
  Strona 1 z 1