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

Problem ze zdarzeniem Myszy [SFML 2.0]

Ostatnio zmodyfikowano 2012-11-18 21:53
Autor Wiadomość
bnk120
Temat założony przez niniejszego użytkownika
Problem ze zdarzeniem Myszy [SFML 2.0]
» 2012-11-14 20:40:04
Witam. Od razu powiem, że przygodę z SFML dopiero zaczynam, także proszę o wyrozumiałość. Tworzę nie dosyć skomplikowaną grę, polegającą na tym, by połączyć kółka (w przypadku kółek zielonych) od jednej do drugiej strony w poziomie (od lewej do prawej i odwrotnie). Jeden ruch to stworzenie jednej linii łączącej dwa kółka poziomo lub pionowo. Póki co zrobiłem tylko tyle:

C/C++
#include <iostream>
#include <SFML\Graphics.hpp>
#include <SFML\Window.hpp>


using namespace std;

const int x_mapa = 15;
const int y_mapa = 15;

int mapa[ x_mapa ][ y_mapa ];

int main()
{
    int pom = 0;
    for( int i = 0; i < x_mapa; ++i )
    {
        pom = i;
        for( int j = 0; j < y_mapa; ++j )
        {
            mapa[ i ][ j ] = pom++;
        }
    }
   
    int szer = 30, wys = 30;
   
    sf::VideoMode Vrozdzielczosc( 1024, 768, 32 );
    sf::RenderWindow okno( Vrozdzielczosc, "Projekt", sf::Style::Fullscreen );
   
    //tworzymy kolko;
    sf::CircleShape kolko;
    kolko.setFillColor( sf::Color::Blue );
    kolko.setRadius( 10 );
   
    sf::CircleShape kolko2;
    kolko2.setFillColor( sf::Color::Green );
    kolko2.setRadius( 10 );
   
    sf::RectangleShape prostokat;
    prostokat.setFillColor( sf::Color::Magenta );
    prostokat.setSize( sf::Vector2f( 10, 20 ) );
    prostokat.setPosition( 100, 200 );
   
   
   
    while( okno.isOpen() )
    {
        okno.clear();
        for( int x = 0; x < x_mapa; ++x )
        {
            for( int y = 0; y < y_mapa; ++y )
            {
                if(( x % 2 ) == 1 &&( y % 2 ) == 0 )
                {
                    kolko.setPosition( szer * x, wys * y );
                    okno.draw( kolko );
                }
                else if(( x % 2 ) == 0 &&( y % 2 ) == 1 )
                {
                    kolko2.setPosition( szer * x, wys * y );
                    okno.draw( kolko2 );
                }
            }
        }
       
        sf::Event zdarzenie;
        while( okno.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::Closed )
                 okno.close();
            else if( zdarzenie.type == sf::Event::KeyPressed )
            if( zdarzenie.key.code == sf::Keyboard::Escape )
                 okno.close();
           
        }
        if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) )
        {
            //tu problem
        }
       
        okno.display();
       
    }
   
    return 0;
}
Teraz pada moje pytanie. Jak konkretnie poradzić sobie z połączeniem dwóch kółek ? Myślałem nad tym by myszką wskazywać, które dwa kółka dany gracz chce połączyć i po sprawdzeniu czy może połączyć dane kółka wstawić linie łączącą owe kółka.
P-69272
bnk120
Temat założony przez niniejszego użytkownika
» 2012-11-17 15:54:24
Wybaczcie za spam, ale nadal nie mogę poradzić sobie z moim problemem. Nie wiem z czym porównać zdarzenie naciśniętego LPM. Próbowałem z elementami mapa[][] jednak nie dawało żadnych skutków. Nie chodzi mi o podanie gotowego rozwiązanie, tylko o jakąś wskazówkę, bądź poprawienie co robię źle.

C/C++
#include <iostream>
#include <SFML\Graphics.hpp>
#include <SFML\Window.hpp>



const int x_mapa = 7;
const int y_mapa = 7;

int mapa[ x_mapa ][ y_mapa ];

using namespace std;



int main()
{
    int pom = 0;
    for( int i = 0; i < x_mapa; ++i )
    {
        pom = i;
        for( int j = 0; j < y_mapa; ++j )
        {
            mapa[ i ][ j ] = pom++;
            cout << mapa[ i ][ j ];
            if( j == 6 )
                 cout << endl;
           
        }
    }
   
    int szer = 30, wys = 30;
   
    sf::VideoMode Vrozdzielczosc( 1024, 768, 32 );
    sf::RenderWindow okno( Vrozdzielczosc, "Projekt" );
   
    //tworzymy kolko;
    sf::CircleShape kolko;
    kolko.setFillColor( sf::Color::Blue );
    kolko.setRadius( 10 );
   
    sf::CircleShape kolko2;
    kolko2.setFillColor( sf::Color::Green );
    kolko2.setRadius( 10 );
   
    sf::RectangleShape prostokat;
    prostokat.setFillColor( sf::Color::Magenta );
    prostokat.setSize( sf::Vector2f( 10, 20 ) );
   
   
   
    while( okno.isOpen() )
    {
        okno.clear();
        for( int x = 0; x < x_mapa; ++x )
        {
            for( int y = 0; y < y_mapa; ++y )
            {
                if(( x % 2 ) == 1 &&( y % 2 ) == 0 )
                {
                    kolko.setPosition( szer * x, wys * y );
                    okno.draw( kolko );
                }
                else if(( x % 2 ) == 0 &&( y % 2 ) == 1 )
                {
                    kolko2.setPosition( szer * x, wys * y );
                    okno.draw( kolko2 );
                }
            }
        }
       
        sf::Event zdarzenie;
       
        while( okno.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::Closed )
                 okno.close();
           
            if( zdarzenie.type == sf::Event::KeyPressed )
            if( zdarzenie.key.code == sf::Keyboard::Escape )
                 okno.close();
           
        }
        if(( zdarzenie.type == sf::Event::MouseButtonPressed ) &&( zdarzenie.mouseButton.button == sf::Mouse::Left ) )
             prostokat.setPosition( zdarzenie.mouseButton.x, zdarzenie.mouseButton.y );
       
        okno.draw( prostokat );
        okno.display();
       
    }
   
    return 0;
}
P-69408
DejaVu
» 2012-11-17 16:20:54
Potrafisz stwierdzić czy kursor znajduje się nad obiektem?
P-69410
bnk120
Temat założony przez niniejszego użytkownika
» 2012-11-18 16:21:28
Z tym mam problem. Póki co doszedłem do tego:
C/C++
sf::Vector2i pos = sf::Mouse::getPosition();
Nie wiem czy dobrze rozumiem, ale zmienna pos pobiera aktualną pozycję myszki. I dalej porównuje:
C/C++
if( pos.x == prostokat.getPosition().x && pos.y == prostokat.getPosition().y )

Pewnie sieje herezję, ale na razie na nic mądrzejszego nie wpadłem ...
P-69484
SeaMonster131
» 2012-11-18 18:48:53
if( myszX >= prostokatX && myszX <= prostokatX + prostokatW &&...)
Podobnie dla y.
P-69502
bnk120
Temat założony przez niniejszego użytkownika
» 2012-11-18 21:53:21
Fajnie, dziękuję za podpowiedzi! Poradziłem sobie ;) Jak będę mieć jakieś problemy to napiszę :)
P-69520
« 1 »
  Strona 1 z 1