Problem ze zdarzeniem Myszy [SFML 2.0]
Ostatnio zmodyfikowano 2012-11-18 21:53
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: #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 ); 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 ) ) { } 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. |
|
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. #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" ); 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; }
|
|
DejaVu |
» 2012-11-17 16:20:54 Potrafisz stwierdzić czy kursor znajduje się nad obiektem? |
|
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: sf::Vector2i pos = sf::Mouse::getPosition();
Nie wiem czy dobrze rozumiem, ale zmienna pos pobiera aktualną pozycję myszki. I dalej porównuje: if( pos.x == prostokat.getPosition().x && pos.y == prostokat.getPosition().y )
Pewnie sieje herezję, ale na razie na nic mądrzejszego nie wpadłem ... |
|
SeaMonster131 |
» 2012-11-18 18:48:53 if( myszX >= prostokatX && myszX <= prostokatX + prostokatW &&...) Podobnie dla y. |
|
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ę :) |
|
« 1 » |